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

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

НЛО прилетело и опубликовало эту надпись здесь
Это здорово конечно, Chrome молодец, но если Вы не уловили суть, в статье рассмотрено построение PDF документа на серверной стороне, а не на клиентской.
Я тоже какое-то время пользовался. Сейчас мне больше нравится phantomjs, так как более гибок.
Единственно он тянет за собой js на сервер. Хотя, по-мойму на современном сервере уже все на нём должно быть — php, python, ruby, js, bash :))

Puppet нам в помощь.
update: Хотя вру — там просто бинарник.
Да-да, точно, собираешь библиотеки из разных языков и пытаешься из всего это сделать один проект)
НЛО прилетело и опубликовало эту надпись здесь
Действительно не понял, а насчёт кармы полностью согласен)
Спасибо, в целом очень интересные библиотеки, хотя если говорить в разрезе языка программирования Java, то wkhtmltopdf ещё можно попытаться подключить через JNI, но вопрос на сколько это уместно, а phantomjs тем более вряд ли подходит.
Очень много геморроя, уж простите и вопрос в том насколько хорошо ваше решение дружит с css3 html5? А ответ прост — вообще не дружит.
Так что разговоры типа можно создать свой сервис, это чисто болтовня и бред, с такими ограничениями можно текстовый странички в пдф гнать не более.

В свое время я активно искал как бы преобразовывать html в pdf на java. В итоге ничего лучше wkhtmltopdf.org найти не удалось, да, получается сторонний вызов из левого места, но что поделать.

А еще если вы сами формируете этот html, лучше сразу взять тот же ireport и делать на нем в итоге выбирая куда конвертить в html или pdf (помню из-за бага в вебките wkhtmltopdf.org неправильно преобразовывал таблицы. пришлось все переделывать )
Так, ну что касается HTML5 и CSS3, я сомневаюсь, что есть хорошие аналоги, которые смогут превратить документ такой структуры в PDF, возможно ли это вообще в полном объеме? Пару лет назад видел на HTML5 и CSS3 игру Angry Birds (http://chrome.angrybirds.com/), скажите, как вы приведете такую страницу к PDF? Что касается wkhtmltopdf, согласен, что это хорошая вещь, но на мой личный взгляд в данном случае
сторонний вызов из левого места
гораздо геморойнее (как Вы выразились), чем то решение, которое я предложил.
Я вот утверждаю что вызов укладывается в несколько строк кода кода , не без проблем но!

На счет HTML5 и CSS3 — wkhtmltopdf их понимает и сгенерирует более менее нормальное отображения поняв основные вещи.

Пару лет назад видел на HTML5 и CSS3 игру Angry Birds (http://chrome.angrybirds.com/), скажите, как вы приведете такую страницу к PDF?

А вы еще скажите чтобы в нее, в пдф можно было поиграть, подумайте над абсурдностью вашего заявления.
Ну я вел к абсурдности Вашего заявления.
Дефакто я не видел ни одного вменяемого инструмента на java да и быть их не может ибо написать такой инструмент — огромный нереальный труд. Чтобы сделать правильный pdf из html надо распорсить html и применить к нему css, а для этого надо написать вещь аналогичную webkit или geko чтопо сути гигантская область работы.
Поэтому все что якобы может работать нативно на java на уровне рендеринга html документов — мягко говоря отстает лет на 10 от текущих веб технологий.

Поэтому я говорю если вы хотите какие-то данные отображать и в html и в pdf — берите ireport. Если вы надеятесь работать с реальными сайтами то смотрите в сторону сторонних решений.

Вы же в статье тоже не хабр в пдф гоните а какую-то непотнятную табличу в 2 строки, по сложности рендеринга — вообще ниочем, даже говорить не очем. Возьмите реальную страницу хабра и посмотрите на свое решение и wkhtmltopdf, сравните качество.
О чем мы спорим? :) Я не считаю, что спорить к месту, я соглашусь с тем, что wkhtmltopdf очень хороша, и соглашусь, что такой подход — тоже выход, но так по сути мы можем найти любую программу, которая способна сгенерировать PDF из веб-страницы, вызовем ее из нашего приложения, подождем пока она закончит свою работу, и отдадим документ клиенту. Чувствуете разницу? В статье я рассмотрел нативный способ на Java, единственный из известных мне, этим и поделился, а использовать его, или возложить обязанности на вызов другой программы — это уже другой разговор, Вы так не считаете? Я лишь считаю, что описанный мною способ тоже имеет право на существование. Основываясь на личном опыте, скажу, что данный способ я успешно использовал в американском проекте, все остались довольны.

Что касается хабра, вот Вам пожалуйста страница из хабра в PDF на том решении, которое я предложил: db.tt/14Z5dIgF
Вот, кстати, PDF, которую сделал wkhtmltopdf: db.tt/hD2qKBxn

В целом, качество wkhtmltopdf отличное: создано оглавление, приятно смотрится документ, только вот беда с заголовками постов, заметили?
Предположу что это реакция на letter-spacing и это фиксится подключением вот такого css
h1 {
   letter-spacing: -1px;
}


Попробуйте вашим методом, сколько потребуется фиксов чтобы адеватно поправить все?
Так, в общем, я вижу, что каждый остается при своем мнении, и разговор в общем-то никуда нас не приведет. Спасибо за дискуссию, больше не вижу смысла поддерживать эту беседу.
Такие титаны еще существуют.

Я даже одно такое решение pure java на дотнет портировал, о чем писал на хабре.

Вполне себе честный был парсинг HTML с не менее честным применением CSS в объеме спеки 2.1 + элементы CSS 3. Порядка 400 000 строк кода было. С рендерилкой SVG даже. И reflow по заданному размеру страницы, чего скажем wkhtmltopdf не умеет.
А как насчёт закладок? Создаёт ли ваше решение структуру закладок на основании html-заголовков?
Кстати да, насчёт закладок. К сожалению, информация о закладках должна быть прописана в коде страницы, подробнее можете почитать здесь: code.google.com/p/flying-saucer/wiki/HowTo_PDF_bookmarks_from_xhtml_markup
Спасибо за пост.
Используем аналогичный подход, только HTML генерируем при помощи XSLT.
До внедрения проводили обзор способов генерации PDF из Html. Получилась вот такая табличка gyazo.com/87913f3008f4023cd11db01134406515

Одним из требования была поддержка постраничных хедеров/футеров, нумерации страниц и переноса заголовков таблиц между страницами (если таблица большая).

Летающая тарелка одна из немногих кто поддерживает margin-boxes и running elements из CSS3, что и позволило реальзовать всё что нужно.

Ой, большое спасибо за приятный отзыв. Кстати, отличная таблица получилась у вас, очень полезная, спасибо!
А я делал так: через html2canvas конвертирую блочный элемент в canvas, из него получаю base64 Data URI изображения, отсылаю его на сервер, а там создаю PDF-файл с этой картинкой. Картинка получается гарантированно такая же, какая была на клиенте. Только немного заблюренная, и текст там не выбирается, но мне это было не важно. Для canvas требуется поддержка HTML5.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории