it-swarm.com.de

Speichern Sie PDF-Dateien mit TCPDF in einem Ordner

Ich habe das Druckmodul und auch die TCPDF-Bibliothek installiert, um PDF -Dateien) zu generieren. Das Druckmodul kann jedoch nur PDF -Dateien zum Herunterladen, aber nicht zum Speichern auf dem Server erstellen Ich habe versucht, die Methode _print_pdf_tcpdf im Druckmodul zu ändern, damit Dateien im Serverordner gespeichert werden können. Ich habe die Funktion _print_pdf_tcpdf wie folgt geändert:

Ich habe die Leitung geändert

$pdf->Output($filename, $output_dest);

zu dieser Zeile:

$pdf->Output($filename, 'F');

Aber dieser Code löst einen Fehler aus:

TCPDF ERROR: Unable to create output file: https://mywebsite/sites/default/files/aaa.pdf

Ich habe Berechtigungen für das Schreiben von Sites-Ordnern festgelegt. Andere Module können in diesen Ordner schreiben, daher glaube ich nicht, dass das Problem in den Berechtigungen liegt. Kann jemand helfen, wo Probleme auftreten können?

1
tomas.teicher

Ich habe selbst einige TCPDF-Implementierungen in Drupal vorgenommen. Wie von Clive vorgeschlagen, sollten Sie in der output() -Methode von TCPDF keine URIs verwenden, sondern absolute Dateipfade angeben.

Dieser Code hat bei mir immer funktioniert:

// Change the path to whatever you like, even public:// will do or you could also make use of the private file system by using private://
$path = drupal_realpath('public://folder/folder2/folder3');

// Supply a filename including the .pdf extension
$filename = 'file.pdf';

// Create the full path
$full_path = $path . '/' . $filename;

// Output PDF
$pdf->Output($full_path, 'F');

EDIT: Wie Clive im Kommentar erwähnt hat, ist drupal_realpath() veraltet. Hier ist eine Alternative:

// Change the path to whatever you like, even public:// will do or you could also make use of the private file system by using private://
$uri = 'public://folder/folder2/folder3';
$stream = file_stream_wrapper_get_instance_by_uri($uri);
$path = DRUPAL_ROOT . '/' . $stream->getDirectoryPath() . '/' . file_uri_target($uri);

// Supply a filename including the .pdf extension
$filename = 'file.pdf';

// Create the full path
$full_path = $path . '/' . $filename;

// Output PDF
$pdf->Output($full_path, 'F');

Stellen Sie einfach sicher, dass Sie immer einen absoluten Pfad für TCPDF angeben.

3
Propaganistas

Blick auf die Fehlermeldung

TCPDF ERROR: Unable to create output file: https://mywebsite/sites/default/files/aaa.pdf

Es scheint, dass Ihre Variable $filename Einen URI anstelle eines Pfads enthält. Dateien können nicht in URIs gespeichert werden. Dazu müssen Sie eine HTTP-Anfrage mit einem geeigneten Verb stellen. Das ist wahrscheinlich das Problem.

Ich bin mit TCPDF nicht so vertraut, daher weiß ich nicht, ob es Stream-Wrapper unterstützt oder nicht. Beides könnte daher funktionieren:

$filename = 'public://aaa.pdf';

oder

$filename = DRUPAL_ROOT . '/sites/default/aaa.pdf';
2
Clive