Преобразование HTML в PDF (не PDF в HTML) с использованием PHP
Я разработчик PHP и в одном из моих проектов мне нужно преобразовать некоторые документы HTML (от 30 до 50 страниц) в документы PDF.
В моем поиске появились следующие возможные решения. Среди них некоторые библиотеки PHP и некоторые приложения командной строки. Каждый из них имеет свои преимущества и недостатки.
Библиотеки PHP:
Для каждой библиотеки у меня есть такие проблемы, как:
- Занимает много времени (более пяти минут, чтобы конвертировать 30 HTML-страниц).
-
Требуется слишком много ресурсов (память и время)
(Я установил следующие параметры в php.ini:
max_execution_time = 600
memory_limit = 250M
но все еще не работает.)
-
Требуется, чтобы страницы HTML были хорошо отформатированы (например, отсутствовали теги для тегов)
Все это работает, когда я пытаюсь преобразовать простые HTML-документы (пять или менее страниц с небольшим CSS)
Приложения с командной строкой
Все приложения в командной строке работают отлично и очень быстро по сравнению с вышеупомянутыми библиотеками, но только когда я запускаю их непосредственно на консоли. Когда я пытаюсь использовать их в PHP с exec()
или system()
, они дают мне ошибки.
Ниже перечислены приложения командной строки и их ошибки при запуске их в PHP:
Итак, теперь я ищу помощь. Кто-нибудь может ответить:
Какая библиотека PHP будет хорошо работать в моем случае?
Почему эти ошибки возникают в приложениях командной строки?
Ответы
Ответ 1
Относительно wkhtmltopdf:
-
Эта вещь работает невероятно быстро, и она также может обрабатывать все виды HTML/CSS, которые вы бросаете на нее, поэтому, когда вам нужна скорость, вы должны ее серьезно рассмотреть. Мы переключились на него в последнее время в нашей компании, и наша работа в формате PDF принесла огромную скорость.
-
По крайней мере, в Linux ему нужны библиотеки XOrg, которые должны быть установлены - серверы обычно не имеют их, так что это может быть вашей проблемой.
Ответ 2
Попробуйте следующее:
Ответ 3
Вы пробовали Prince?
Ответ 4
Попробуйте проект инструмента командной строки HTMLDOC https://www.msweet.org/htmldoc/index.html
Ответ 5
Есть много решений для преобразования HTML в PDF, я могу предложить вам один из https://grabz.it.
У них есть гибкий PHP API, который может использоваться cronjobs или непосредственно с веб-страницы PHP.
Если вы хотите попробовать, сначала вы должны получить ключ приложения + секрет для авторизации и разработка бесплатного SDK
Вот пример базовой реализации.
//First init
include("GrabzItClient.class.php");
// Create the GrabzItClient class
// Replace "APPLICATION KEY", "APPLICATION SECRET" values for your account!
$grabzIt = new GrabzItClient("Application Key", "Application Secret");
// To take a PDF screenshot
$grabzIt->URLToPDF("http://www.google.com");
// To save in case public callback handler is available
$grabzIt->Save("http://www.example.com/handler.php");
// OR To save in case public callback handler is not available,
// it a synchonous method can be usedthe will force your application to wait
// while the screenshot is created
$filepath = "images/result.jpg";
$grabzIt->SaveTo($filepath);
Можно получить другие скриншоты, такие как скриншот изображения и т.д..
Ответ 6
Но что делать, если вы будете использовать любой онлайн-сервис и отправлять HTML-контент через HTTP?
Конечно, большинство из них не являются бесплатными.
Ответ 7
Одна возможность: автоматически script:
- Возьмите веб-страницу
- Откройте эту страницу в веб-браузере
- Сделайте скринкап этой страницы
- превратить его в PDF
шаг 4 прост - есть много библиотек PHP/cmdline, которые позволят вам помещать изображения в PDF или конвертировать их (например, fpdf.)
Для шагов 1-3... вы могли бы попробовать посмотреть код здесь: http://browsershots.org/. Не уверен, что это будет актуально - похоже, для этого требуется много настроек. Может быть, их архитектура может работать?
Ответ 8
Несколько вопросов и предложений:
- Вам действительно нужно преобразовать его в PDF? Зачем? В некоторых случаях было бы лучше придерживаться HTML.
- Является ли обновление аппаратного обеспечения сервера, который генерирует PDF файл? Я спросил об этом, потому что если все библиотеки, которые вы пытались сделать слишком долго, чтобы создать, то ваш единственный вариант может быть обновление сервера.
- Возможно, вы захотите решить проблему с ошибкой командной строки. Если он дает самые быстрые результаты, то найдите работу вокруг него.