Конвертировать HTML + CSS в PDF с PHP? [закрытый]

У меня есть документ HTML (не XHTML), который отлично отображается в Firefox 3 и IE 7. Он использует довольно простой CSS для его стиля и отлично отображает в HTML.

теперь я ищу способ конвертировать его в PDF. Я пробовал:

  • DOMPDF: у него были огромные проблемы с таблицами. Я учитывал свои большие вложенные таблицы, и это помогло (прежде чем он просто потреблял до 128M памяти, а затем умирал-это мой предел памяти в php.ini), но это делает полный беспорядок таблиц и, кажется, не получает изображений. Таблицы были просто базовым материалом с некоторыми стилями границ, чтобы добавить несколько строк в разных точках;
  • HTML2PDF и HTML2PS: мне действительно повезло с этим. Он визуализировал некоторые изображения (Все изображения являются URL-адресами Google Chart), и форматирование таблицы было намного лучше, но, похоже, у него была проблема сложности, которую я еще не понял, и продолжал умирать с неизвестными ошибками node_type (). Не знаю, куда идти дальше.; и
  • свойстве htmldoc: это, кажется, отлично работает на базовом HTML, но почти не поддерживает CSS, поэтому вам нужно делать все в HTML (я не понимал, что это все еще 2001 В Htmldoc-land... так что для меня это бесполезно.

Я попробовал приложение Windows под названием Html2Pdf Pilot, которое на самом деле сделало довольно приличную работу, но мне нужно что-то, что как минимум работает на Linux и идеально работает по требованию через PHP на веб-сервере.

Что я упускаю, или как решить эту проблему?

30 ответов


важно: Обратите внимание, что этот ответ был написан в 2009 году, и это может быть не самое экономичное решение сегодня в 2018 году. Онлайн-альтернативы, такие как PDFShift лучше сегодня, чем они были тогда.


посмотреть PrinceXML.

Это, безусловно, лучший конвертер HTML / CSS в PDF, хотя он и не бесплатный (но, эй, ваше программирование может быть и не бесплатным, поэтому, если это спасет вас 10 часов работы, вы дома бесплатно (так как вам также необходимо учитывать, что альтернативные решения потребуют от вас установки выделенного сервера с правильным программным обеспечением)

О да, я упоминал, что это первое (и, вероятно, единственное) решение HTML2PDF, которое делает full ACID2 ?

Образцы PrinceXML


посмотреть wkhtmltopdf . Это с открытым исходным кодом, на основе webkit и бесплатно.

мы написали небольшой учебник здесь.

изменить( 2017 ):

Если бы это было построить что-то сегодня, я бы не пошел по этому маршруту больше.
Но будет использовать http://pdfkit.org/ вместо этого.
Вероятно, зачистив его от всех зависимостей nodejs, для запуска в браузере.


после некоторого исследования и общего вытягивания волос решение кажется HTML2PDF. DOMPDF проделал ужасную работу с таблицами, границами и даже умеренно сложной компоновкой и свойстве htmldoc кажется достаточно надежным, но почти полностью CSS-невежественным, и я не хочу возвращаться к выполнению HTML-макета без CSS только для этой программы.

HTML2PDF выглядел наиболее многообещающим, но я продолжал иметь эту странную ошибку о нулевой ссылке аргументов равен. Наконец-то я нашел решение. В основном, PHP 5.1.x отлично работал с regex replaces (preg_replace_*) на строках любого размера. В PHP 5.2.1 введен в PHP.ini config директива называется библиотеки PCRE.backtrack_limit. Этот параметр конфигурации ограничивает длину строки, для которой выполняется сопоставление. Почему это было введено, я не знаю. Значение по умолчанию было выбрано как 100,000. Почему такое низкое значение? Опять же, без понятия.

A ошибка была поднял против PHP 5.2.1 для этого, который все еще открыт почти два года спустя.

что ужасает в этом, так это то, что когда предел превышен, замена просто молча не. По крайней мере, если ошибка была поднята и зарегистрирована, у вас будет некоторое представление о том, что произошло, почему и что изменить, чтобы исправить это. Но нет.

Итак, у меня есть 70k HTML-файл, чтобы превратиться в PDF. Для этого требуется следующий php.Ини настройки:

  • библиотеки PCRE.backtrack_limit = 2000000; # вероятно, больше, чем мне нужно, но это нормально
  • memory_limit = 1024M; # да один гигабайт; и
  • max_execution_time = 600; # да 10 минут.

теперь проницательный читатель, возможно, заметил, что мой HTML-файл меньше 100k. Единственная причина, по которой я могу догадаться, почему я попал в эту проблему, заключается в том, что html2pdf выполняет преобразование в xhtml как часть процесс. Возможно, это захватило меня (хотя почти 50% раздувания кажется странным). Как бы то ни было, вышеперечисленное сработало.

теперь html2pdf-это ресурс. Мой файл 70k занимает около 5 минут и по крайней мере 500-600M ОЗУ для создания 35-страничного PDF-файла. Недостаточно быстро (на сегодняшний день) для загрузки в режиме реального времени, к сожалению, и использование памяти ставит коэффициент использования памяти в порядке 1000-к-1 (600M ОЗУ для файла 70k), что совершенно смешно.

к сожалению, это лучшее, что я придумал.


Почему бы вам не попробовать mPDF версии 2.0? Я использовал его для создания PDF-документа. Работает отлично.

между тем mPDF находится в версии 5.7 и активно поддерживается, в отличие от HTML2PS / HTML2PDF

но имейте в виду, что документация действительно может быть трудно справиться. Например, взгляните на эту страницу: https://mpdf.github.io/.

очень основные задачи вокруг html в pdf, можно сделать с этой библиотекой, но больше сложные задания займут некоторое время чтения и" понимания " документации.


1) использовать MPDF !

a) извлечение в yourfolder

b) создать .в PHP на yourfolder и вставить такой код:

<?php
include('../mpdf.php');
$mpdf=new mPDF();
$mpdf->WriteHTML('<p style="color:red;">Hallo World<br/>Fisrt sentencee</p>');
$mpdf->Output();   exit;
 ?>

c) открыть .в PHP браузер




2) Использовать pdfToHtml !

1) экстракт pdftohtml.exe в корневую папку:

2) внутри этой папки, в anyfile.в PHP file, поместите этот код (предполагая, что есть исходный пример.pdf too):

<?php
$source="example.pdf";
$output_fold="FinalFolder";

    if (!file_exists($output_fold)) { mkdir($output_fold, 0777, true);}
$result= passthru("pdftohtml $source $output_fold/new_filename",$log);
//var_dump($result); var_dump($log);
?>

3) ввести FinalFolder, и будут преобразованные файлы (столько страниц, сколько было в исходном PDF-файле..)


оформить заказ TCPDF. Он имеет некоторые функции HTML в PDF, которые могут быть достаточно для того, что вам нужно. Это также бесплатно!


предлагаю DocRaptor (который использует PrinceXML как "двигатель")


просто чтобы поднять поток, я пробовал DOMPDF, и он работал отлично. Я использовал DIV и другие элементы уровня блока, чтобы позиционировать все, держали его строго CSS 2.1, и он играл veru красиво.


хорошая новость! быстро!!

Snappy это очень просто библиотека PHP5 с открытым исходным кодом, позволяющая создавать миниатюры, моментальные снимки или PDF с url-адреса или html-страницы. И... он использует отлично webkit-based wkhtmltopdf

наслаждайтесь! ^_^


Ну, если вы хотите найти идеальный XHTML + CSS в PDF конвертер библиотеки, забудьте об этом. Это далеко не возможно. Потому что это так же, как найти идеальный браузер (XHTML+CSS rendering engine). У нас есть такой? IE или FF?

У меня был некоторый успех с DOMPDF. Дело в том, что вы должны изменить свой код HTML+CSS, чтобы идти с тем, как библиотека предназначена для работы. В остальном у меня неплохие результаты.

см. ниже:

Оригинал HTML-код

преобразование HTML в PDF


Это уже упоминалось, но я просто хотел бы подтвердить, что mpdf-самый простой, самый мощный и самый бесплатный конвертер html в pdf. Небо - это предел. Вы даже можете создавать PDF-файлы динамических пользовательских данных.

например, клиент хотел систему CMS, чтобы он мог обновить список треков музыки, которую он играл в своем клубе. Это не было проблемой, но он также хотел, чтобы пользователи могли скачать .pdf плейлиста, и поэтому этот загружаемый pdf имел обновляться cms тоже. Благодаря mpdf, с некоторыми простыми циклами и перемежающимися переменными я мог бы сделать именно это. То, что, как я думал, займет недели, буквально заняло минуты.

большой статьи это помогло мне начать.


на HTML2PDF и HTML2PS то, что было первоначально упомянуто в открытии сообщения, говорило о пакете 2009 с этим ссылке

но есть лучше HTML2PDF

Он основан на TCPDF, хотя он частично на французском языке.

вы можете иметь верхние или нижние колонтитулы таблицы, которые повторяются на страницах и имеют номера страниц и общее количество страниц. См.примеры. Я использую его больше трех лет и рекомендовать ее.


есть учебник по devzone Zend по генерации pdf из php (часть 1, часть 2) без каких-либо внешних библиотек. Я никогда не реализовывал такого рода решение, но поскольку это все php, вы можете найти его более гибким для реализации и отладки.


Я использую fpdf для создания pdf-файлов с использованием php. До сих пор мне удавалось производить простые результаты.


С точки зрения стоимости, использование веб-сервиса (API) может во многих случаях быть более разумным подходом. Кроме того, путем аутсорсинга этого процесса вы разгрузить собственную инфраструктуру/бэкэнд и - при условии, что вы используете авторитетный сервис - обеспечить совместимость с регулировкой веб-стандартов, время безотказной работы, короткие сроки обработки и быстрой доставки контента.

Я провел некоторые исследования по большинству веб-сервисов в настоящее время на рынке, пожалуйста, найдите ниже API, которые я чувствую, стоит упомянуть в этом потоке, в порядке, основанном на соотношении цена / стоимость. Все они предлагают предварительно составленные классы PHP и пакеты.

  1. pdflayer.com - Стоимость: $ Качество: ☆☆☆☆
  2. docraptor.com - Стоимость: $ $ $ - Качество:☆☆☆☆☆
  3. pdfcrowd.com - Стоимость: $$ - Качество: ☆☆☆

качество:

наличие высококачественного двигателя PrinceXML в качестве основы, DocRaptor ясно предлагает самое лучшее качество PDF, возвращающ сильно отполированные и хорошо преобразованные документы PDF. Однако API для pdflayer сервис становится довольно близко. Pdfcrowd не обязательно результат с качеством, но со скоростью обработки.

стоимость:

pdflayer.com - Как указано выше, наиболее экономически эффективным вариантом здесь является pdflayer.com, предлагая совершенно бесплатную подписку план для 100 ежемесячных PDF-файлов и премиум-подписки в диапазоне от $9.99 - $119.99. цена за 10 000 ежемесячных PDF-документов составляет $ 39,99.

docraptor.com - предлагает 7-дневный бесплатный пробный период. Премиум планы подписки варьируются от $ 15 - $ 2250. цена за 10 000 ежемесячных PDF-документов составляет ~ $ 300.00.

pdfcrowd.com - Предложение 100 PDF-Файлов после бесплатно. Планы премиум-подписки в диапазоне от $9-$89. цена за 10 000 ежемесячных PDF-документов составляет ~ $ 49.00.

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


упоминание Дэррила Хейна выше TCPDF вероятно, отличная идея. Код Николы Асуни довольно удобен и мощен. Единственный убийца, если вы когда-либо планируете объединить PDF-файлы с сгенерированным PDF, у него нет этих функций. Вам нужно будет создать PDF, а затем объединить его, используя что-то вроде PDFTK от Sid Steward (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/).


попробуйте захватить последнюю ночь dompdf build-я использовал более старую версию, которая была ужасной ресурсной свиньей и заняла вечность, чтобы отобразить мой pdf. После захвата Ночной из здесь.

потребовалось всего несколько секунд, чтобы создать PDF - файл- и он был так же хорошо визуализирован, как и с PrinceXML / Docraptor. Похоже, они серьезно оптимизировали dompdf код, так как я в последний раз использовал его!


Если у вас есть доступ к командной строке можно использовать PhantomJS создать PDF с URL (удаленных или локальных).

он работает очень хорошо и является бесплатным решением.

взгляните на это пример скрипт сделан для этой точной проблемы.


этот вопрос уже довольно старый, но не видел, чтобы кто-нибудь упоминал CutyCapt Так я и сделаю:)

CutyCapt

CutyCapt - это небольшая кросс-платформенная консольная утилита для захват webkit рендеринга веб-страницы в различные вектора и Растровые форматы, включая SVG, PDF, PS, PNG, JPEG, TIFF, GIF и BMP


возможно, вы можете попробовать использовать Tidy перед передачей файла в конвертер. Если один из рендереров задыхается от какой-то проблемы HTML (например, незамкнутый тег), это может помочь.


Я не думаю, что класс php будет лучшим для рендеринга страницы xHtml с css.

Что произойдет, когда выйдет новое правило css? (скоро css 3.0...)

лучший способ визуализации html-страницы-это, очевидно, браузер. Firefox 3.0 может изначально "печатать" в формате pdf, torisugary разработал расширение (печать командной строки) для его использования. здесь вы найдете.

в любом случае, есть еще много проблем runninr firefox просто в формате pdf конвертер...

на данный момент я думаю, что wkhtmltopdf является лучшим (это тот, который используется браузером safari), быстрым, быстрым, удивительным. Да, и с открытым исходным кодом... посмотреть


Я разработал публичный API для создания PDF-файлов с веб-страниц. Он имеет хороший клиентский класс PHP, который делает его очень простым в использовании. Он использует wkhtmltopdf для отображения PDF в облаке.

Не нужно ничего особенного в HTML. Нет необходимости в абсолютных URL-адресах в ссылках images/css/js. Работает на localhost (dev machine) тоже.

В настоящее время служба имеет конечные точки в 4 регионах Azure: восток США, Запад США, Север ЕС, Юго-Восточная Азия.

Она быстро, так как он использует собственный протокол для отправки содержимого веб-страницы в API для преобразования в PDF.

Это надежно, потому что все конечные точки сбалансированы по нагрузке.

бесплатная учетная запись доступна для тестирования или низкого использования. Подробности на сайте:

https://rotativahq.com


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

  1. сайт htm2pdf - предлагает API для преобразования HTML в PDF, а также имеет PHP SDK, что делает его очень простым в реализации на PHP; он предлагает выбор местоположений серверов в Европе, Азии и США
  2. PDFmyURL - предлагает API, который также делает URL и HTML в PDF, с примерно такой же функциональностью, как HTM2PDF, но работает с балансировкой нагрузки пейзаж и был вокруг немного дольше

дело в том, что эти два API отличаются от всех ранее упомянутых решений тем, что - помимо преобразования HTML в PDF с помощью CSS и JavaScript - он также предлагает управление правами PDF, водяные знаки и шифрование. Поэтому это все-в-одном решение для тех, кто хочет взяться.

отказ от ответственности: я работаю в Kaiomi, компании, которая управляет обоими этими веб-сайтами.


точный рендеринг ничего не значит. Это подтверждает?

все браузеры делают все возможное, чтобы просто показать что-то на экране, независимо от того, насколько плохой вход. И конечно они не делают то же самое. Если вы хотите тот же рендеринг, что и FireFox, вы можете использовать его механизм рендеринга. Для этого есть генераторы pdf. Но это ужасно много работы.


Я рекомендую TCPDF или DOMPDF, это порядок


Я пробовал много разных библиотек для PHP. Все перечисленные я пробовал. По-моему TCPDF библиотека-лучшая компромиссная производительность/удобство использования. Это очень просто установить и использовать, а также хорошую производительность в небольших средних приложений. Если вам нужен высокопроизводительный и очень большой PDF-документ, используйте он предоставляет еще модуль, но будьте готовы к кодированию трудно!


действительно ли преобразование HTML в PDF нужно возникать на стороне сервера с использованием PHP?

Я только что наткнулся jsPDF, клиентское решение с использованием HTML5 / JavaScript. МТИ-лицензией код на GitHub тоже.


TCPDF работает нормально, никаких зависимостей, является бесплатным и постоянно исправляется. Он имеет разумную скорость, если поставляемое содержимое HTML / CSS хорошо сформировано. Обычно я генерирую от 50 до 300 КБ ввода HTML (включая CSS) и получаю вывод PDF в течение 1-3 секунд с 10 - 15 страниц PDF.

Я настоятельно рекомендую использовать порядок библиотека как HTML довольно форматер перед отправкой чего-либо в TCPDF.


не PHP, а Java библиотека, который делает вещь:

летающая тарелка принимает XML или XHTML и применяет CSS 2.1-совместимый таблицы стилей к нему, для рендеринга в PDF

его можно использовать из PHP via system() или подобный вызов. Хотя это требует XML отмеченность input.


Web API

Если есть люди, которые всегда ищут подобные вещи, есть свободный веб-сайт, который позволяет конвертировать html-код и страницы в pdf. Существует также (очень маленький) api, который позволяет вам получить pdf-файл из url.

регистрация здесь