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

StackOverflow https://stackoverflow.com/questions/1403820

  •  05-07-2019
  •  | 
  •  

Вопрос

Я 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-ПРЕДУПРЕЖДЕНИЕ **:не могу открыть дисплей::0.0
    Протокол не указан

  2. wkhtmltopdf

    Загрузка страницы:10%
    Загрузка страницы:33%
    Загрузка страницы:100%
    Ожидание перенаправления
    Вывод страниц
    QPainter::begin():Возвращено ложное значение
    QPainter::begin():Возвращено ложное значение
    QPainter::сохранить:Художник не активен
    QPainter::масштаб:Художник не активен
    QPainter::setRenderHint:Painter должен быть активен, чтобы устанавливать подсказки по рендерингу.
    QPainter::setBrush:Художник не активен
    QPainter::pen:Художник не активен
    QPainter::setPen:Художник не активен

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

Поэтому теперь я ищу помощи.Кто-нибудь может ответить:

Какая библиотека PHP подойдет в моем случае?

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

Это было полезно?

Решение

Касательно wkhtmltopdf:

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

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

Другие советы

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

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

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

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

<Ол>
  • Возьмите веб-страницу
  • Откройте эту страницу в веб-браузере
  • Возьмите скриншот этой страницы
  • Преврати его в 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);    
    

    Можно получить другие виды снимков экрана, например снимок экрана и т. д. .

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top