Я пытаюсь создать PDF с Laravel Snappy.
Проблема в том, когда я пытаюсь запустить команду wkhtmltopdf в консоли, например:
wkhtmltopdf http://google.com google.pdf
он работает нормально и генерирует PDF.
Но когда я пытаюсь сгенерировать pdf в моем контроллере, он выдает это исключение:
RuntimeException
Файл
‘/ home / alemil / проекты / test / storage / app / year_reports / pdf test.pdf’ не был создан
(команда: / usr / local / bin / wkhtmltopdf —lowquality —orientation
‘landscape’ — размер страницы ‘a3’
‘/Tmp/knp_snappy5bb49cd6bfcf14.16728595.html’
‘/ home / alemil / Projects / test / storage / app / year_reports / pdf test.pdf’).
Я попытался скопировать команду выше и выполнить прямо в консоли. Вот что я получаю:
Загрузка страниц (1/6)
Ошибка: не удалось загрузить Http: //tmp/knp_snappy5bb49cd6bfcf14.16728595.html, с кодом состояния сети 3 и кодом состояния http 0 — хост tmp не найден
Ошибка: сбой загрузки страницы Http: ///tmp/knp_snappy5bb49cd6bfcf14.16728595.html (иногда это будет работать только для игнорирования этой ошибки с помощью —load-error-processing ignore)
Выход с кодом 1 из-за сетевой ошибки: HostNotFoundError
Как я вижу, он пытается извлечь локальный файл, поскольку он удален. Я не смог найти эту проблему, поэтому я спрашиваю, может ли кто-то решить эту проблему или есть какие-либо идеи.
Моя среда — Ubuntu 18.04 PHP и PHP 7.2.10.
Это мой код:
// app.php aliases
'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
// controller code
PDF::loadView('admin.reports.annual.pdf_template', $data)
->setPaper('a3', 'landscape')
->save(
storage_path('app/annual_reports/') . $report->pdf,
true // when there is file with same name it throws file already exists so I had to set owerwrite to true
);
Кроме того, еще одна вещь, на которую следует обратить внимание, я использовал barryvdh / laravel-dompdf, и все работало нормально, за исключением того, что он не может отображать графики, поэтому я сейчас пытаюсь настроить snappy.
хмм
Я думаю (не уверен), что в вашем приложении есть блокировка, которая блокирует доступ вашего контроллера к ссылке. Или при создании PDF.
Это также может быть ваш синтаксис кода.
Вы можете попробовать это для HTML:
$pdf = new Pdf('/usr/local/bin/wkhtmltopdf');
$pdf->generateFromHtml('<h1>test</h1><p>test from test</p>', '/tmp/test-123.pdf');
Других решений пока нет …