Конвертировать 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 ?
посмотреть 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, которые могут быть достаточно для того, что вам нужно. Это также бесплатно!
просто чтобы поднять поток, я пробовал 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, чтобы идти с тем, как библиотека предназначена для работы. В остальном у меня неплохие результаты.
см. ниже:
Это уже упоминалось, но я просто хотел бы подтвердить, что mpdf-самый простой, самый мощный и самый бесплатный конвертер html в pdf. Небо - это предел. Вы даже можете создавать PDF-файлы динамических пользовательских данных.
например, клиент хотел систему CMS, чтобы он мог обновить список треков музыки, которую он играл в своем клубе. Это не было проблемой, но он также хотел, чтобы пользователи могли скачать .pdf плейлиста, и поэтому этот загружаемый pdf имел обновляться cms тоже. Благодаря mpdf, с некоторыми простыми циклами и перемежающимися переменными я мог бы сделать именно это. То, что, как я думал, займет недели, буквально заняло минуты.
большой статьи это помогло мне начать.
на HTML2PDF и HTML2PS то, что было первоначально упомянуто в открытии сообщения, говорило о пакете 2009 с этим ссылке
но есть лучше HTML2PDF
Он основан на TCPDF, хотя он частично на французском языке.
вы можете иметь верхние или нижние колонтитулы таблицы, которые повторяются на страницах и имеют номера страниц и общее количество страниц. См.примеры. Я использую его больше трех лет и рекомендовать ее.
Я использую fpdf для создания pdf-файлов с использованием php. До сих пор мне удавалось производить простые результаты.
С точки зрения стоимости, использование веб-сервиса (API) может во многих случаях быть более разумным подходом. Кроме того, путем аутсорсинга этого процесса вы разгрузить собственную инфраструктуру/бэкэнд и - при условии, что вы используете авторитетный сервис - обеспечить совместимость с регулировкой веб-стандартов, время безотказной работы, короткие сроки обработки и быстрой доставки контента.
Я провел некоторые исследования по большинству веб-сервисов в настоящее время на рынке, пожалуйста, найдите ниже API, которые я чувствую, стоит упомянуть в этом потоке, в порядке, основанном на соотношении цена / стоимость. Все они предлагают предварительно составленные классы PHP и пакеты.
- pdflayer.com - Стоимость: $ Качество: ☆☆☆☆
- docraptor.com - Стоимость: $ $ $ - Качество:☆☆☆☆☆
- 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.
Это надежно, потому что все конечные точки сбалансированы по нагрузке.
бесплатная учетная запись доступна для тестирования или низкого использования. Подробности на сайте:
хотя есть много решений, предлагаемых уже, я рекомендую следующие два:
- сайт htm2pdf - предлагает API для преобразования HTML в PDF, а также имеет PHP SDK, что делает его очень простым в реализации на PHP; он предлагает выбор местоположений серверов в Европе, Азии и США
- PDFmyURL - предлагает API, который также делает URL и HTML в PDF, с примерно такой же функциональностью, как HTM2PDF, но работает с балансировкой нагрузки пейзаж и был вокруг немного дольше
дело в том, что эти два API отличаются от всех ранее упомянутых решений тем, что - помимо преобразования HTML в PDF с помощью CSS и JavaScript - он также предлагает управление правами PDF, водяные знаки и шифрование. Поэтому это все-в-одном решение для тех, кто хочет взяться.
отказ от ответственности: я работаю в Kaiomi, компании, которая управляет обоими этими веб-сайтами.
точный рендеринг ничего не значит. Это подтверждает?
все браузеры делают все возможное, чтобы просто показать что-то на экране, независимо от того, насколько плохой вход. И конечно они не делают то же самое. Если вы хотите тот же рендеринг, что и FireFox, вы можете использовать его механизм рендеринга. Для этого есть генераторы pdf. Но это ужасно много работы.
Я пробовал много разных библиотек для 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.