Сохраняйте PDF-файлы в папке с помощью TCPDF


Я установил модуль печати, а также библиотеку TCPDF для создания PDF-файлов. Однако модуль печати может просто создавать PDF-файлы для загрузки, но не для сохранения в папке сервера. Я попытался изменить метод _print_pdf_tcpdf в модуле печати, чтобы файлы можно было сохранять в папке сервера. Я изменил функцию _print_pdf_tcpdf следующим образом:

Я изменил строку

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

К этой строке:

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

Но этот код выдает ошибку:

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

У меня есть установите разрешения для папки сайтов для записи. Другие модули могут записывать в эту папку, поэтому я не думаю, что проблема в разрешениях. Кто-нибудь может помочь , где может возникнуть проблема?

 1
Author: kiamlaluno, 2013-12-16

3 answers

Я сам сделал пару реализаций TCPDF в Drupal. Как предположил Клайв, вам не следует использовать URI в методе TCPDF output(), вместо этого вы захотите указать абсолютные пути к файлам.

Этот код всегда работал для меня:

// 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');

РЕДАКТИРОВАТЬ: Как упоминал Клайв в комментарии, drupal_realpath() устарел. Вот альтернатива:

// 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');

Просто убедитесь, что вы всегда предоставляете абсолютный путь для TCPDF.

 3
Author: Propaganistas, 2013-12-16 13:15:34

Просмотр сообщения об ошибке

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

Похоже, что ваша переменная $filename содержит URI вместо пути. Файлы не могут быть сохранены в URI; для этого вам нужно будет сделать HTTP-запрос с соответствующим глаголом. Так что, скорее всего, в этом и будет проблема.

Я не очень хорошо знаком с TCPDF, поэтому не знаю, поддерживает ли он обертки потоков или нет. Поэтому может сработать любой из них:

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

Или

$filename = DRUPAL_ROOT . '/sites/default/aaa.pdf';
 2
Author: Clive, 2013-12-16 10:13:42
$pdf->Output( "myfile.pdf", "F");
TCPDF ERROR: Unable to create output file: myfile.pdf

В 'include/tcpdf_static.php "файл около 2435 строк в статической функции "Fopenlocal", если я удалю полный оператор "if"... работает нормально.

public static function fopenLocal($filename, $mode) {

    /*if (strpos($filename, '://') === false) {
        $filename = 'file://'.$filename;
    } elseif (strpos($filename, 'file://') !== 0) {
        return false;
    }*/
    return fopen($filename, $mode);
 -1
Author: atul baraiya, 2015-09-17 11:58:04