Преобразование HTML в PDF (не PDF в HTML) с использованием PHP

Я разработчик PHP, и в одном из моих проектов мне нужно преобразовать некоторые документы HTML (от 30 до 50 страниц) в документы PDF.

В моем поиске появились следующие возможные решения. Среди них некоторые библиотеки PHP и некоторые приложения командной строки. У каждого свои преимущества и недостатки.

Библиотеки PHP:

  1. fpdf (требуется больше усилий для преобразования)
  2. tcpdf (требуется больше усилий для преобразования)
  3. html2fpdf http://html2fpdf.sourceforge.net
  4. html2pdf http://html2pdf.fr/
  5. dompdf http://code.google.com/p/dompdf/ (по сравнению с другими, хорошо работает)

Для каждой библиотеки у меня есть такие проблемы, как:

  1. Занимает много времени (более пяти минут, чтобы конвертировать 30 HTML-страниц)
  2. Требуется слишком много ресурсов (память и время)

    (Я установил следующие параметры в php.ini:

    max_execution_time = 600
    memory_limit = 250M

    но все еще не работает.)

  3. Необходимо, чтобы страницы HTML были хорошо отформатированы (например, отсутствующие теги для тегов)

Все это работает, когда я пытаюсь преобразовать простые HTML-документы (пять или менее страниц с небольшим CSS)

Приложения командной строки

Все приложения в командной строке работают отлично и очень быстро по сравнению с вышеупомянутыми библиотеками, но только когда я запускаю их непосредственно на консоли. Когда я пытаюсь использовать их в PHP с помощью exec() или system() , они дают мне ошибки.

Ниже приведены приложения командной строки и их ошибки, когда я запускаю их в PHP:

  1. html2pdf ( http://www.tufat.com/s_html2ps_html2pdf.htm )

    html2pdf: 11380): Gtk-WARNING **: невозможно открыть отображение:: 0.0
    Протокол не указан

  2. 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: Художник неактивен

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

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

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

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

Related of "Преобразование HTML в PDF (не PDF в HTML) с использованием PHP"

Что касается wkhtmltopdf :

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

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

Попробуй это:

Вы пробовали принца ?

Но что делать, если вы будете использовать любой онлайн-сервис и отправить свой HTML-контент по HTTP? Конечно, большинство из них не являются бесплатными.

Одна возможность: наличие сценария автоматически:

  1. Возьмите веб-страницу
  2. Открыть эту страницу в веб-браузере
  3. Сделайте снимок этой страницы
  4. Включите его в PDF-файл

шаг 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); в //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); 

Можно получить другие скриншоты, такие как скриншот изображения и т . Д.