laravel-snappy: файл не был создан

В данный момент я пытаюсь выяснить, откуда возникла эта проблема, учитывая, что ничего существенного не изменилось.

Но в настоящее время я использую laravel-snappy для создания PDF-файлов, у меня не было проблем до сих пор, когда я внезапно получаю следующие ошибки:

Файл ‘C: \ Users \ ADMINI ~ 1 \ AppData \ Local \ Temp \ knp_snappy5a7d3011c11883.41249127.pdf’ не был создан (команда: «C: \ Program Files \ wkhtmltopdf \ bin \ wkhtmltopdf» —lowquality —images — -enable-javascript —javascript-delay «10» «C: \ Users \ ADMINI ~ 1 \ AppData \ Local \ Temp \ knp_snappy5a7d3011b9a179.91650543.html» «C: \ Users \ ADMINI ~ 1 \ AppData \ Local \ Temp \ knp_snappy5a7d3011c11883.41249127.pdf «).

К сожалению, это не говорит мне, почему это не было создано. В этот момент обработчик ошибок указывает на эту конкретную строку, где он возвращает эту ошибку:

if (!$this->fileExists($output)) {
throw new \RuntimeException(sprintf(
'The file \'%s\' was not created (command: %s).',
$output, $command
));
}

Эта строка происходит из этого файла: vendor\knplabs\knp-snappy\src\Knp\Snappy\AbstractGenerator.php

Мой двоичный файл wkhtmltopdf находится в правильном месте, и ничего не изменилось в ответ на настройку этих файлов. И да, в настоящий момент эти файлы размещаются и обслуживаются на платформе Windows Server.

Мой конфиг для snappy:

<?php

return array(

'pdf' => array(
'enabled' => true,
'binary' => '"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf"',
'timeout' => false,
'options' => array(),
'env'     => array(),
),
'image' => array(
'enabled' => true,
'binary'  => '"C:\Program Files\wkhtmltopdf\bin\wkhtmltoimage"',
'timeout' => false,
'options' => array(),
'env'     => array(),
),

);

Мои файлы генерируются как таковые через мой контроллер:

  public function downloadPDF(Shipment $shipment) {
$shipment_details = $shipment->shipment_details;
$shipment->print_date = Carbon::now();
$shipment->save();

$pdf = PDF::loadView('shipments.pdf', compact('shipment','shipment_details'))
->setOption('images', true)
->setOption('enable-javascript', true)
->setOption('javascript-delay', 10);
return $pdf->download('shipment'.$shipment->uuid.'.pdf');

$shipment->print_date = Carbon::now();
$shipment->save();
}

2

Решение

Самый простой способ обойти это — выполнить необработанную команду: wkhtmltopdf не имеет того же параметра командной строки в Linux / Windows, это означает, что оболочка snappy работает только с amd64 и перестает работать, когда она используется с исполняемым файлом 64-битных окон.

exec("C:/path/to/wkhtmltopdf.exe path/to/my.html destination/for/my.pdf");

Так как это решение ужасно и функциональность wkhtmltopdf ограничена в Windows, я настоятельно рекомендую вам развернуть его с помощью Docker или просто разрабатывать под Linux. В противном случае вы не сможете использовать несколько функций, таких как нижний колонтитул pdf, кодировка pdf utf-8 и многое другое …

Вот руководство о том, как использовать docker compose для laravel!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]