Преобразование HTML + CSS в PDF с помощью PHP?

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

Теперь я перехожу к PDF файлу. Я пробовал:

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

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

Что мне не хватает, или как я могу решить эту проблему?

+1475
24 дек. '08 в 8:14
источник поделиться
34 ответа
  • 1
  • 2

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

Вот некоторые онлайн-сервисы, которые вы можете использовать:


Посмотрите на PrinceXML.

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

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

Образцы PrinceXML

+488
12 янв. '09 в 8:47
источник

Связанные вопросы


Похожие вопросы

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

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

EDIT (2017):

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

+642
31 авг. '09 в 13:36
источник

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

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

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

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

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

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

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

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

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

+144
12 янв. '09 в 3:51
источник

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

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

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

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

+118
26 мар. '10 в 11:11
источник

1) используйте MPDF!

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

b) создайте file.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 поместите этот код (предположим, есть и исходный пример .pdf):

<?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 файле..)

+64
28 нояб. '13 в 14:52
источник

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

+53
21 февр. '09 в 20:50
источник

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

+29
13 нояб. '10 в 0:48
источник

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

+27
21 янв. '09 в 23:32
источник

Хорошие новости! Snappy!!

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

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

+26
21 нояб. '11 в 20:23
источник

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

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

Отличная статья, которая помогла мне начать работу.

+25
18 февр. '13 в 20:50
источник

Хорошо, если вы хотите найти идеальную библиотеку конвертирования XHTML + CSS в PDF, забудьте об этом. Это далеко не возможно. Потому что это похоже на поиск идеального браузера (движок рендеринга XHTML + CSS). Есть ли у нас одна? IE или FF?

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

См. ниже:

Оригинальный HTML

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

+22
27 дек. '08 в 6:17
источник

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

Но есть лучший HTML2PDF

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

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

+21
07 мая '15 в 10:43
источник

Я использую fpdf для создания PDF файлов с использованием PHP. До сих пор это работало хорошо для меня, чтобы производить простые результаты.

+19
21 февр. '09 в 20:21
источник

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

+18
24 дек. '08 в 9:46
источник

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

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

+14
10 авг. '11 в 13:16
источник

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

+13
24 авг. '10 в 19:01
источник

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

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

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

Качество:

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

Стоимость:

pdflayer.com. Как указано выше, наиболее рентабельным вариантом является pdflayer.com, предлагающий полностью бесплатный план подписки на 100 ежемесячных PDF файлов и подписки на премиальные в диапазоне от 9,99 до 11,99 долларов. Цена за 10 000 ежемесячных PDF-документов составляет 39,99 доллара США.

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

pdfcrowd.com. Предлагая 100 PDF файлов один раз бесплатно. Премиальные тарифные планы варьируются от $9 до $89. Цена за 10 000 ежемесячных PDF-документов составляет ~ 49 долларов США.

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

+13
11 февр. '16 в 17:51
источник

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

Он работает очень хорошо, и это бесплатное решение.

Посмотрите на этот example script, сделанный для этой точной проблемы.

+12
08 окт. '14 в 14:14
источник

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

CutyCapt

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

+11
20 февр. '12 в 15:19
источник

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

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

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

Во всяком случае, есть еще много пробных runninr firefox, как PDF-конвертер...

На данный момент я думаю, что wkhtmltopdf - лучший (тот, который используется браузером сафари), быстрый, быстрый, потрясающий. Да, с открытым исходным кодом... Посмотрите на него

+9
12 мая '09 в 21:02
источник

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

+9
24 дек. '08 в 9:16
источник

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

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

В настоящее время услуга имеет конечные точки в 4 регионах Лазурного региона: США, США, США, Юго-Восточная Азия.

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

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

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

https://rotativahq.com

+9
22 июн. '16 в 14:22
источник

Хотя уже существует множество решений, я рекомендую следующие два:

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

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

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

+7
02 июн. '14 в 17:59
источник

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

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

+7
24 дек. '08 в 9:09
источник

Используйте DOMPDF для получения наилучшего результата. Вот Примеры ссылок.

+7
03 дек. '17 в 1:19

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

+6
17 мая '13 в 12:38
источник

Требуется ли преобразование HTML в PDF на сервере с помощью PHP?

Я просто наткнулся на jsPDF, клиентское решение, использующее HTML5/JavaScript. Лицензионный код MIT также включен в GitHub.

+5
29 авг. '13 в 15:06
источник

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

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

+5
08 дек. '13 в 11:09
источник

Здесь мой подход, используя phantomjs.

+4
03 дек. '17 в 1:19

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

+4
22 мая '13 в 6:47
источник
  • 1
  • 2

Посмотрите другие вопросы по меткам или Задайте вопрос