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


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

Сейчас я ищу способ преобразовать его в PDF. Я пробовал:

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

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

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

Author: cletus, 2008-12-24

30 answers

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


Взгляните на PrinceXML.

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

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

Образцы PrinceXML

 460
Author: SchizoDuckie, 2018-06-04 09:32:03

Взгляните на wkhtmltopdf . Это открытый исходный код, основанный на webkit и бесплатный.

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

РЕДАКТИРОВАТЬ( 2017 ):

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

 634
Author: Mic, 2016-12-23 11:07:35

После некоторого исследования и общего выдергивания волос решение, похоже, будет 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. Почему такое низкое значение? Опять же, без понятия.

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

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

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

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

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

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

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

 143
Author: cletus, 2015-11-24 02:08:31

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

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

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

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

 118
Author: Karthick, 2016-08-25 12:06:03

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

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

Б) создать 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;
 ?>

В) открыть file.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) введите Конечную папку , и там будут преобразованные файлы (столько страниц, сколько было в исходном PDF..)

 63
Author: tazo todua, 2016-08-26 06:49:41

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

 53
Author: Darryl Hein, 2016-12-09 17:43:14

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

 29
Author: aRahmanS29, 2015-01-24 11:25:42

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

 27
Author: Filip Dupanović, 2013-08-13 20:47:05

Хорошие новости! Энергичный!!

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

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

 25
Author: Paulo Coghi, 2011-11-21 20:23:29

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

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

См. Ниже:

Оригинал HTML

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

 22
Author: datasn.io, 2013-05-08 05:41:49

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

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

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

 22
Author: Starkers, 2018-06-12 08:05:38

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

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

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

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

 20
Author: Luke Wenke, 2018-06-12 04:29:19

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

 18
Author: yoavf, 2008-12-24 09:46:11

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

 18
Author: , 2009-02-21 20:21:17

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

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

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

Качество:

Имея высококачественный движок PrinceXML в качестве основы, DocRaptor явно обеспечивает наилучшее качество PDF, возвращая высокую отшлифованные и хорошо преобразованные PDF-документы. Однако сервис pdflayer API здесь довольно близок. 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.

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

 13
Author: Frank, 2016-02-11 18:00:11

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

 13
Author: Arachnid, 2016-07-28 08:51:15

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

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

 12
Author: Arni J, 2014-01-02 18:38:18

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

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

Взгляните на этот пример сценария, созданного именно для этой проблемы.

 12
Author: Hjortlund, 2015-01-24 11:23:47

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

Вырезанный колпачок

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

 11
Author: Koen., 2012-02-20 15:19:17

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

 9
Author: PhiLho, 2008-12-24 09:16:29

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

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

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

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

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

 9
Author: Strae, 2009-05-12 21:02:00

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

Нет необходимости в чем-то особенном в HTML. Нет необходимости в абсолютных URL-адресах в ссылках на изображения/css/js. Работает и на локальном хосте (машине разработчиков).

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

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

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

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

Https://rotativahq.com

 9
Author: Giorgio Bozio, 2016-06-22 14:22:52

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

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

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

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

 7
Author: user1914292, 2014-06-02 17:59:32

Точная визуализация ничего не значит. Подтверждает ли это?

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

 6
Author: Stephan Eggermont, 2008-12-24 09:09:27

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

 5
Author: criss_ae, 2013-05-17 12:38:12

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

 5
Author: trullallero, 2013-05-22 06:47:40

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

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

 5
Author: Oliver Schafeld, 2013-08-29 15:06:44

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

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

 5
Author: lubosdz, 2013-12-08 11:09:22

Не PHP, а Библиотека Java, которая делает следующее:

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

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

 3
Author: Ivan Kurmanov, 2014-01-02 18:37:09

Веб-API

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

Проверьте это здесь

 3
Author: Superdrac, 2014-05-23 15:18:40