Как стать автором
Обновить

Комментарии 23

А я сейчас использую wkhtmltopdf. Отличная библиотека — генерирует PDF сразу из HTML-страницы, при этом автоматически подгружая шрифты, изображения и прочее. При этом правильно читает весь CSS и @media-квери, умеет делать колонтитулы, разрывы страниц и т.п.

Кстати, моё CV использует как раз эту библиотеку: cv.andrewdunai.com, так что всегда можно скачать PDF-версию.

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

П.с. солидарен с автором в симпатии к шрифту Roboto ;)
Я читал про нее статью. Успокаивает то, что уже есть возможность на основе структуры сайта формировать PDF.
С формулами в mathml что-то она до сих пор не дружит.
Открою маленький секрет. Это не библиотека. Это программа. Внутри довольно старый по нынешним меркам webkit а генерация PDF идет через виртуальный принтер. То есть камни нужно кидать в сторону виртуального принтера и не системных шрифтов.

Еще есть вариант через PhantomJS это добро делать. Там чуть поновее webkit (точнее новее Qt, а следовательно и webkit)
Кстати по поводу принтера это очень интересно. Никогда бы сам не подумал.
Через PhantomJS? А он это может? Точнее даже так, на сколько адекватно он это может?

Использовал на практике несколько библиотек, во всех имеются те или иные проблемы при попытке использовать html как шаблон для верстки. Вариант использовать для этого безголовый браузер конечно крайне любопытен.
Да, там в документации даже говорится что и как. Единственное что — стоит попробовать собрать себе 2-ую версию. Ибо в 1.* дико старый webkit.
Пробовал уже… и даже дев версию использовал. У меня так и не взлетело. Ибо да, тоже столкнулся со старостью webkit и багов в нем которых нет в новом.
Ну и да, wkhtmltopdf по сути тот же «безголовый» браузер. Он глупее это да, но внутри принцип работы тот же.
Порекомендовали попробовать эту.
Спасибо за подсказку! Провоевал с dompdf больше часа, так и не победил соблюдение границ документа. У меня вывод большого табличного документа (декларация) и в PDF процентов 10-15 документа не помещалось. С mpdf проблемы не возникло.
И все-же везде свои плюсы и минусы… dompdf поддерживает селекторы first-child, last-child и т.п. (за это у него отвечает stylesheet.cls.php), а mpdf нет.
Не понимает mpdf и селекторов типа tr > td.
Я долгое время использовал mpdf, но потом открыл для себя wkhtmltopdf — на типовых документах вроде счетов и актов состоящих из 2-5 страниц получил улучшение производительности в 2 раза! Также из mpdf в лог постоянно сыпались различные notice undefined index.
Тоже использую wkhtmltopdf так как рендер точный, а вот с библиотеками на php очень много гемора с версткой чего либо если это не таблица, а про флоаты вообще можно забыть. тестил на mpdf, dompdf и tcpdf никто не смог нормально сделать рендер
Но wkhtmltopdf есть отдельный процесс и консольная тулза.
Ну если у вас не шаред хостинг то особой проблемы не возникает
Да и на шаредах нормальных все хорошо.
C dompdf есть проблема, он иногда уходит в бесконечный цикл. Для продакшена такое неприемлемо
Ага есть такое. При не значительных отклонениях в верстке шаблона, можно «словить» зацикливание.
Пока знаю, что на двух крупных проектах используется для отчетов DOMPDF.
Пара комментариев.
GD, на сколько я понимаю, сама по себе с прозрачностью работать умеет, но в софте, который ее использует, вечно проблемы с тем, чтобы заставить ее делать это правильно. Решения на основе ImageMagick в общем случае надежнее. Так что не сюрприз.

Что касается wkhtmltopdf из комментариев — если выводить через нее счета и таблицы, проблемы нет. Если начинается что-то более сложное, можно над затачиванием простейшего макета под вывод через нее сидеть два дня.
Данная библиотека использовалась для генерации простых документов.
К сожалению для генерации простых html-документов wkhtml2df показал себя гораздо производительнее. Правда это была сторонняя утилита — по описанию это именно тот бинарник который в вебките отвечает за отрисовку pdf-ок. По итогам — dompdf требовалось до 60Мб памяти на генерацию и 1-2с, вебкитовскому бинернику — 0,1Мб памяти и 100-200мс на те же фреймы.
Была также задача показывать html и pdf версию одно и того же документа, очевидно это средство в какой-то мере реализует данные возможности. В итоге поимел много головной боли не только с шаблонизатором а-ля Smarty, но и те что все эти чудесные page-break ломали все html/print-стили.
Тем не менее библиотека лучше чем ничего.
Затем возникла потребность генерировать интеллектуальные документы со сложной разметкой и был использован MPDF.
MPDF является надстройкой над KPDF(совсем базовый разметчик а-ля нарисовать линию А-Б), на простые документы MPDF кушал 250-300МБ памяти, и был написан настолько монолитно что для того чтобы нарисовать что-то стоящее(например ТОРГ-12) потребовалось переопределять целые блоки кода по 100-120 строчек. Спасением стал ASP.NET Crystall Reports.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации