Преобразование HTML в PDF (а не PDF в HTML) с использованием PHP [закрыто]
-
05-07-2019 - |
Вопрос
Я PHP-разработчик, и в одном из моих проектов мне нужно преобразовать некоторые документы HTML (около 30–50 страниц) в документы PDF.
Мой поиск выявил следующие возможные решения.Среди них есть некоторые библиотеки PHP и некоторые приложения командной строки.У каждого есть свои преимущества и недостатки.
PHP-библиотеки:
- fpdf (требуется больше усилий для конвертации)
- tcpdf (требуется больше усилий для конвертации)
- html2fpdf http://html2fpdf.sourceforge.net
- html2pdf http://html2pdf.fr/
- dompdf http://code.google.com/p/dompdf/ (по сравнению с другими работает хорошо)
Для каждой библиотеки у меня есть такие проблемы, как:
- Занимает много времени (более пяти минут для преобразования 30 HTML-страниц).
Требует слишком много ресурсов (памяти и времени)
(Я установил следующие параметры в php.ini:
max_execution_time = 600
memory_limit = 250M
но все равно ничего не получается.)
Требуется, чтобы HTML-страницы были хорошо отформатированы (например,нет пропущенных закрывающих тегов)
Все это работает, когда я пытаюсь конвертировать простые HTML-документы (пять или меньше страниц с небольшим количеством CSS).
Приложения командной строки
Все приложения командной строки работают отлично и очень быстро по сравнению с вышеуказанными библиотеками, но только когда я запускаю их непосредственно на консоли.Когда я пытаюсь использовать их в PHP с exec()
или system()
, они выдают мне ошибки.
Ниже приведены приложения командной строки и их ошибки при запуске на PHP:
html2pdf (http://www.tufat.com/s_html2ps_html2pdf.htm)
html2pdf:11380):Gtk-ПРЕДУПРЕЖДЕНИЕ **:не могу открыть дисплей::0.0
Протокол не указанwkhtmltopdf
Загрузка страницы:10%
Загрузка страницы:33%
Загрузка страницы:100%
Ожидание перенаправления
Вывод страниц
QPainter::begin():Возвращено ложное значение
QPainter::begin():Возвращено ложное значение
QPainter::сохранить:Художник не активен
QPainter::масштаб:Художник не активен
QPainter::setRenderHint:Painter должен быть активен, чтобы устанавливать подсказки по рендерингу.
QPainter::setBrush:Художник не активен
QPainter::pen:Художник не активен
QPainter::setPen:Художник не активенhtmltopdf (http://www.ultrashareware.com/html-to-pdf.htm)
Поэтому теперь я ищу помощи.Кто-нибудь может ответить:
Какая библиотека PHP подойдет в моем случае?
Почему эти ошибки возникают в приложениях командной строки?
Решение
Касательно wkhtmltopdf:
Эта штука работает невероятно быстро, а также может обрабатывать все виды HTML/CSS, которые вы ей используете, поэтому, когда вам нужна скорость, вам следует серьезно подумать об этом.Недавно мы перешли на него в нашей компании, и скорость обслуживания PDF-файлов значительно возросла.
По крайней мере, в Linux необходимо установить библиотеки XOrg — на серверах их обычно нет, так что это может быть вашей проблемой.
Другие советы
Попробуй это:
- tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf_examples
- fpdf.org
- http://code.google.com/p/wkhtmltopdf/
Вы пробовали принц ?
Но что, если Вы будете использовать какой-либо онлайн-сервис и отправлять HTML-контент по HTTP? Конечно, большинство из них не являются бесплатными.
Одна возможность: иметь скрипт автоматически:
<Ол>Шаг 4 прост - есть множество библиотек PHP / cmdline, которые позволят вам помещать изображения в pdf или конвертировать их (например, fpdf.)
Для шагов 1-3 ... вы можете попробовать посмотреть код здесь: http://browsershots.org / . Не уверен, что это будет уместно - похоже, это требует большой настройки. Может быть, их архитектура может работать?
Пара вопросов и предложений:
- Вам действительно нужно конвертировать его в PDF?Почему?В некоторых случаях лучше придерживаться HTML.
- Можно ли обновить аппаратное обеспечение сервера, генерирующего PDF-файл?Я спросил об этом, потому что если создание всех библиотек, которые вы пробовали, занимает слишком много времени, то единственным выходом может быть обновление сервера.
- Возможно, вы захотите решить проблему с ошибкой командной строки.Если это дает самые быстрые результаты, найдите обходной путь.
Попробуйте проект инструмента командной строки HTMLDOC https://www.msweet.org/projects.php?Z1 р>
Существует множество решений для преобразования 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's a synchonous method can be usedthe will force your application to wait
// while the screenshot is created
$filepath = "images/result.jpg";
$grabzIt->SaveTo($filepath);
Можно получить другие виды снимков экрана, например снимок экрана и т. д. .