Конвертировать 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 (я не понимал, что это все еще 2001 год в Htmldoc-land...) так что это бесполезно для меня.

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

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

30 1431

30 ответов:

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


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

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

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

Образцы PrinceXML

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

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

EDIT (2017):

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

б) создать .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 тоже):

<?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 to PDF converter, забудьте об этом. Это далеко не возможно. Потому что это так же, как найти идеальный браузер (XHTML+CSS rendering engine). У нас есть один? IE или FF?

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

см. ниже:

Оригинал HTML

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

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

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

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

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

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

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

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

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

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

С точки зрения стоимости, использование веб-сервиса (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.

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

Даррил Хейн упоминал выше о 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 через system() или подобный вызов. Хотя для этого требуется XML отмеченность input.

Web API

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

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