Я разработчик PHP, и в одном из моих проектов мне нужно преобразовать некоторые документы HTML (от 30 до 50 страниц) в документы PDF.
В моем поиске появились следующие возможные решения. Среди них некоторые библиотеки PHP и некоторые приложения командной строки. У каждого свои преимущества и недостатки.
Библиотеки PHP:
Для каждой библиотеки у меня есть такие проблемы, как:
Требуется слишком много ресурсов (память и время)
(Я установил следующие параметры в 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-WARNING **: невозможно открыть отображение:: 0.0
Протокол не указан
wkhtmltopdf
Страница загрузки: 10%
Страница загрузки: 33%
Страница загрузки: 100%
Ожидание перенаправления
Вывод страниц
QPainter :: begin (): возвращает false
QPainter :: begin (): возвращает false
QPainter :: save: Painter not active
QPainter :: scale: Painter not active
QPainter :: setRenderHint: Painter должен быть активным, чтобы установить подсказки рендеринга
QPainter :: setBrush: Painter not active
QPainter :: pen: неактивен художник
QPainter :: setPen: Художник неактивен
htmltopdf ( http://www.ultrashareware.com/html-to-pdf.htm )
Итак, теперь я ищу помощь. Может ли кто-нибудь ответить:
Какая библиотека PHP будет хорошо работать в моем случае?
Почему эти ошибки возникают в приложениях командной строки?
Что касается wkhtmltopdf :
Эта вещь работает невероятно быстро, и она также может обрабатывать все виды HTML / CSS, которые вы бросаете на нее, поэтому, когда вам нужна скорость, вы должны ее серьезно рассмотреть. Мы переключились на него в последнее время в нашей компании, и наша работа в формате PDF принесла огромную скорость.
По крайней мере, в Linux ему нужны библиотеки XOrg, которые нужно установить – у серверов обычно их нет, так что это может быть вашей проблемой.
Попробуй это:
Вы пробовали принца ?
Но что делать, если вы будете использовать любой онлайн-сервис и отправить свой HTML-контент по HTTP? Конечно, большинство из них не являются бесплатными.
Одна возможность: наличие сценария автоматически:
шаг 4 прост – есть много библиотек PHP / cmdline, которые позволят вам помещать изображения в PDF или конвертировать их (например, fpdf.)
Для шагов 1-3 … вы можете попробовать посмотреть код здесь: http://browsershots.org/ . Не уверен, что это будет актуально – похоже, для этого требуется много настроек. Может быть, их архитектура может работать?
Несколько вопросов и предложений:
Попробуйте выполнить проект инструмента командной строки 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);
в//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);
Можно получить другие скриншоты, такие как скриншот изображения и т . Д.