Конвертировать 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 на веб-сервере.

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

1559
задан 03.05.2018, 10:46

9 ответов

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

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

<час>

Взглянули на PrinceXML.

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

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

Образцы PrinceXML

536
ответ дан 29.08.2019, 18:54
  • 1
    PrinceXML является действительно потрясающим. Только если не случалось так что дорогой:-( – acme 16.09.2010, 00:03
  • 2
    Моя компания записала веб-сервис, созданный вокруг принца. Значительно более дешевые оплачиваемые авансом затраты, и применимый, не будучи должен установить что-либо: docraptor.com – Joel Meador 11.01.2011, 20:31
  • 3
    I' ve использовал DocRaptor, также. Потрясающий способ извлечь пользу из принца, не имея необходимость платить за дорогую лицензию. Поздравляю на большом продукте, Joel. – Nate365 15.01.2011, 12:30
  • 4
    Слишком дорогой. WKHTMLTOPDF (см. другой ответ) свободен, делает задание и использует WebKit, который является потрясающим. – thomallen 18.04.2012, 14:17
  • 5
    Это решение работает отлично. – boulaycote 07.10.2019, 00:42

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

9
ответ дан 29.08.2019, 18:54
  • 1
    Да актуальный вопрос, но I' ve уже думал об этом. В моем HTML нет никаких несопоставленных ни нестандартных тегов. – cletus 24.12.2008, 21:36
  • 2
    I' m предполагающий это было бы подобно для контроллера панели вкладок, чем также? Спасибо за справку. –  20.04.2020, 09:46

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

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

7
ответ дан 29.08.2019, 18:54

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

20
ответ дан 29.08.2019, 18:54

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

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

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

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

, Таким образом, у меня есть 70k файл HTML для превращений в PDF. Это требует следующих настроек php.ini:

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

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

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

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

148
ответ дан 29.08.2019, 18:54
  • 1
    @cletus может Вы говорить мне о стабильной версии HTML2PDF. Вышеупомянутый пример ссылки удержал от использования – ripa 29.06.2013, 01:27

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

55
ответ дан 29.08.2019, 18:54
  • 1
    it' s поддержка для рендеринга HTML, скорее ограничен, Вы могли бы хотеть считать это: tcpdf.org/doc/classTCPDF.html#ac3fdf25fcd36f1dce04f92187c621407 – Hendra Uzia 15.07.2011, 22:17
  • 2
    Это - на самом деле исключение? AFAIK, it' s not— ни Objective C, ни C++. Вы раньше были в состоянии установить точку останова на CGError, хотя я помню то, чтобы это было явно упомянутым в Quartz' s сообщения об ошибках (но у меня никогда не было этой определенной ошибки прежде). (Пользователи AppCode: Это doesn' t поддерживают символьные точки останова с 2.1— you' ll должны использовать XCode для этого.) – Peter Hosey 04.10.2013, 23:03

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

28
ответ дан 29.08.2019, 18:54
  • 1
    да я don' t действительно знают, является ли это исключение в этой точке, я haven' t сделанная разработка iOS в долгое время... @PeterHosey в appcode Вы получаете доступ к сырым данным gdb/lldb подсказка? раз так можно установить символьную точку останова..., Вы могли в XCode даже устанавливать один с условием f! =f (я воображаю, но haven' t протестированный) – Grady Player 05.10.2013, 00:29

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

20
ответ дан 29.08.2019, 18:54
  • 1
    Визуальная часть ясно помогла понять различие между этими двумя объявлениями. – user1493813 18.04.2020, 23:06

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

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

Посмотрите ниже:

Исходный HTML Преобразования HTML

к PDF

25
ответ дан 29.08.2019, 18:54
  • 1
    @PeterHosey в XCode, можно установить условную точку прерывания, которая я уверен, что Вы знаете..., но условие, являющееся для некоторого плавания f, f! (сам) =f только верен для NaN – Grady Player 05.10.2013, 00:51

Теги

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