Правильно ли настроен wkhtmltopdf?
Я использую это ( https://github.com/KnpLabs/KnpSnappyBundle), чтобы отобразить HTML-файл в PDF. Я построил его на тестовом сервере, и все это прекрасно работает, но когда я перемещаю его на работающий сервер, ни одно из изображений не отображается вообще. Оба сервера являются AWS EC2. Я пробовал использовать изображения png и jpg, а также относительные, абсолютные и полные пути, но ничего, что я делаю, похоже, не работает.
Мне кажется, что проблема в конфигурации живого сервера, но я не настраивал его сам и не знал, как это проверить.
Изображения отображаются, если я перехожу к ним напрямую и до того, как будет создан файл PDF, поэтому я знаю, что изображения там в порядке.
Я пробовал печатать /home/ubuntu/wkhtmltox/bin/wkhtmltopdf http://www.google.com test.pdf
в консоль, и это то, что я получаю
Загрузка страниц (1/6) QSslSocket: не удается разрешить SSLv2_client_method ] 10% QSslSocket: не удается разрешить SSLv2_server_method Подсчет страниц (2/6)
Разрешение ссылок (4/6)
Загрузка верхних и нижних колонтитулов (5/6)
Печать страниц (6/6) Готово
Затем он сохраняет копию домашней страницы на сервере. Так что это определенно работает, но я не понимаю, почему это не работает, когда я использую его на сайте.
Все пути являются абсолютными, изначально они были http://{{ domain }}/pdf/images/background_logo.png и т. Д. Я изменил их на http://subdomain.livesite.com/pdf/images/background_logo.png и т. д., чтобы убедиться, что путь определенно правильный, но это не имеет значения. Я проверил пути в браузере, и они без проблем загружаются. Это отлично работает на тестовом сервере, поэтому я не уверен, почему он не работает на живом сайте. Код, используемый для создания PDF-файла:
public function generatePdf($app)
{
$products = $this->getRecurringOrderProducts();
if (count($products) > 0)
{
$filename = $this->getPdfFilename($app);
if (!file_exists($filename))
{
// Generate HTML
$html = $app['twig']->render('order/pdf.twig', array(
'entry' => $this,
'products' => $products,
'expiry_date' => $this->getExpiryDate(), // Add this line
'content_height' => intval( (8*100*count($products))/95 )+1,
'domain' => $app['config']['domain'],
));
// Generate PDF
$snappy = new Pdf($app['wkhtmltox_bin']);
$snappy->setOption('orientation', 'landscape');
$snappy->generateFromHtml(utf8_decode($html), $filename);
}
}
}
Я использую wkhtmltopdf версии 0.9.9, если это поможет
Я не уверен, что я делаю неправильно, но был бы очень благодарен за любую помощь, пожалуйста.
1 ответ
Мне удалось это исправить, проблема заключалась в том, что URL-адрес изображения должен был быть абсолютным, но когда я тестировал его до того, как сервер не кэшировал его, отображался старый файл.