Преобразование 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:

  • 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: Художник неактивен
    QPainter:: scale: Художник неактивен
    QPainter:: setRenderHint: Художник должен быть активным, чтобы установить подсказки рендеринга
    QPainter:: setBrush: художник неактивен
    QPainter:: pen: Неактивен художник
    QPainter:: setPen: Художник неактивен

  • htmltopdf (http://www.ultrashareware.com/html-to-pdf.htm)

Итак, теперь я ищу помощь. Кто-нибудь может ответить:

Какая библиотека PHP будет хорошо работать в моем случае?

Почему эти ошибки возникают в приложениях командной строки?

Ответ 1

Относительно wkhtmltopdf:

  • Эта вещь работает невероятно быстро, и она также может обрабатывать все виды HTML/CSS, которые вы бросаете на нее, поэтому, когда вам нужна скорость, вы должны ее серьезно рассмотреть. Мы переключились на него в последнее время в нашей компании, и наша работа в формате PDF принесла огромную скорость.

  • По крайней мере, в Linux ему нужны библиотеки XOrg, которые должны быть установлены - серверы обычно не имеют их, так что это может быть вашей проблемой.

Ответ 3

Вы пробовали Prince?

Ответ 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 файл? Я спросил об этом, потому что если все библиотеки, которые вы пытались сделать слишком долго, чтобы создать, то ваш единственный вариант может быть обновление сервера.
  • Возможно, вы захотите решить проблему с ошибкой командной строки. Если он дает самые быстрые результаты, то найдите работу вокруг него.