Чем делать PDF-таблицы?

Вот есть задача: сделать довольно сложную табличку в PDF (~1000 чисел на половинке А4).

Понятно, что просто 12-м кеглем оно не влезет, плюс там нужны выделения (шрифтом, подчеркиваниями, фоном).

Пока тестируюсь - выгоняю все в HTML, а в PDF превращаю Word-2007 (отлично работает, кстати), но хочется этот генератор в онлайне (и результат - в PDF, ибо под распечатку).

Пробовал LaTeX, но тамошний табличный процессор меня не удовлетворил, слишком много места хочет и нужную мне таблицу даже на целую А4 размещает с трудом (а на половинку - никак не лезет).

Куды крестьянину податься? PDF::Table какая-то невозможно скучная штука.....

Есть ли коммандлайновый (и юниксный) софт, который может срендерить HTML в PDF ?

Update:

  • wkhtmltopdf - очень похож на работающий, хотя и потребовал себе Xvfb (м.б. Qt так собран, надо разбираться). Единственная пока проблема - греческий шрифт, у меня в табличках Φ и μ После подсовывания Windows-шрифтов в fontpath - все полностью как надо.
  • htmldoc, наоборот, для моих задач не подходит т.к. стили документа полностью игнорирует.
  • Firefox игнорирует фон у табличек (а у меня выделение ячеек сделано зеброй), что неприятно, остальное работает.

Comments

может проще латех подточить?
наверняка там просто по умолчанию пробелы больше, а тебя и меньшие устраивают.

Это по трудоемкости не лучше (а скорее сильно хуже), чем PDF::Table насиловать.

Т.е. я так попробовал и меня стошнило :)

ну а plain TeX?
LaTeX используя только для русификации.

Для plain tex я буду вынужден сам таблицы срендерить. Ну то есть определить ширину столбцов (высота, по счастью, фиксирована) и в них нагадить.

А я сломался даже без вложенных таблиц (отчего таблица получается не 9x10 в каждой ячейке вложено еще 3x6 а сразу 27x60) - это я про PDF::Table

[бегло проглядев главу из все про тех]
определять не надо. тех сам.

Ну я посмотрел в какие-то примеры, там везде попадаются размеры. Не разбирался, размеры чего это были :)

я посмотрел последний рпимер в главе 22 -- никаких размеров, кроме общей ширины таблицы

ReportLab --- library to create PDF documents using Python (в дебиане -- python-reportlab)
Правда непонятно -- как оно с таблицами дружит.

Гы. Добро пожаловать в волшебный мир PDF-а

Коротко: _нормального_ ничего нет, разве что в XSL-FO верстать. Но можно поизвращаться с http://code.google.com/p/wkhtmltopdf/. В действии на него можно посмотреть тут: http://www.pdfmyurl.com/.

А вебкит должен рулить. Буду смотреть, спасибо.

Ресурсы меня мало парят, вряд ли больше сотни в день таких фигень будет делаться.....

Да ни фига он не рулит. Он умеет, например, разрывать страницу посередине строки (верхняя половина букв на одной стр., нижняя на другой). И print-правила CSS-а плохо понимает. Но попробовать можно.

Ещё FF можно приспособить: http://jkroon.blogs.uls.co.za/it/scriptingprogramming/using-firefox-35-t...

Xvb очень не хочется :)

Но да, решение, конечно.

Докладываю

1) FF и под юниксом тоже - не печатает серый фон в ячейках. Это типа фича такая.
2) wkhtmltopdf - полностью меня удовлетворяет (из принт-правил CSS мне нужен только перевод страницы :)
3) Проблема со шрифтами пропала подсовыванием виндовых через xset +fp, результат почти полностью устраивает (вот еще битмепы плохо масштабируются, некрасиво)

4) Разбиение страниц по полстроки - "известная фича вебкита" если в двух колонках таблицы строки не выровнены.

wkhtmltopdf очень похож на работающий солюшн, осталось только найти греческие шрифты и научиться их ему подсунуть (на удаленной машине без X11 немножко сложно оказалось посмотреть....)

Спасибо!

XSL-FO - это для сильных духом. Хотя если табличка простая - то может быть вполне ничего.
Ребята из дружественного подразделения, которое на этом своё решение построили, жаловались только, что open source библиотека для этого дела хреново работает под нагрузкой.

а pdf-принтеров под линукс разве нету?

Ну есть CUPS (-PDF), но как бы это не было сохранение битмепа в PDF.

Не, по-моему там честный дистиллер на базе ghostscript-а.

Под Linux нет GDI - т.е. стандартного набора графических примитивов, которые можно подать на вход pdf-принтера.
Соответственно, остается задача что подать на вход. Стандартным языком описания страниц в мире *nix является Postscript. Но если мы умудрились каким-то способом получить нужный Postscript, вопрос "а как из этого сделать pdf" уже не стоит. Ибо это и ежу понятно.

Есть, правда, еще Xprint - некая аналогичная GDI попытка сделать из набора вызовов API для рисования на экране набор примитивов для передачи принтеру. Но на сервере обычно нет X.

Не, ну действительно можно слепить самому из вебкита и прославиться в веках.

Но то что Давид посоветовал - пока выглядит наименее геморойно. Вот будут длинные выходные - буду пробовать.

можно еще на PS сделать...
[убегает]

Помнится я когда-то давно генерировал pdf-ы из html-я, получая сначала postscript с помощью html2ps (скрипт такой перловый), а потом его в pdf ghostcript-ом. У html2ps было то ограничение, что он не умел резать таблицы на страницы (привет табличной верстке) но с настоящими таблицами, которые для табличного представления данных, справлялся неплохо.

Еще помнится, попадался мне TeX-овский формат, понимающий в качестве входного языка HTML. Вот что там было со сложными таблицами - не помню.

Еще есть вариант - openoffice.org умеет работать в headless режиме, и задачи типа "взять сто текстовых файлов и сохранить их в формате .doc" в этом режиме решает замечательно. По-моему задачу "взять файл в любом понимаемом формате и экспортировать в pdf" - тоже.

Еще есть вариант - openoffice.org умеет работать в headless режиме
а это конкретно как?
и умеет ли он в этом режиме заменять catdoc?

если там есть ответ на мой вопрос, то он какой-то черезчур неочевидный

В моём посте, конечно, более сложный вопрос обсуждается, но на ту же тему ("...в каждом из которых последовательно много раз конвертируется свой уникальный документ...").
Смотрим man catdoc:

catdoc - reads MS-Word file and puts its content as plain text on standard output

Ваш вопрос был:

и умеет ли он [openoffice.org] в этом режиме заменять catdoc?

В моём посте есть ссылка на скрипт под названием unoconv, с сайта производителя:

unoconv converts between any document format that OpenOffice understands.

Как вы понимаете, "MS-Word" и "plain text" - подпадают под определение "document format that OpenOffice understands".
Вот вам и замена catdoc в виде джаггернаута под названием OpenOffice+unoconv.
Ума не приложу, чего производители OpenOffice не суют что-либо подобное этому скрипту (тыщи их) в коробку... :-(

"Отвечаю ли я вам на ваш ответ"? :-)

P.S.: По-моему, PDF - это one-way фрмат, т.е. в него можно всё, что угодно, но вот из него - не всегда; это больше - векторная графика, эдакий SVG.

на сарае тоже много что написанно, однако там дрова лежат.

формально такой путь прописан, а реально что получается, особенно с таблицами и внедренным екселем каким?

мой вопрос подразумевал, не "прописанна ли такая возможность", а "можно ли этим реально пользоваться и не блевать"

С внедренным экселем - не скажу, а с табличками в текстовых документах - очень даже приличный pdf делается.
Ещё читайте ниже комментарий.

причем тут пилять пдф?!
я хочу в почте, читаемой в mutt по ssh прочитать вордовый аттач.
мне нах pdf, svg и прочая ересь.

Ой-ой-ой!!!

Теперь моя очередь не понимать; я думал, что вы в тему поста, а там именно про PDF.

С "plain-text" - это уже не ко мне, но на моём дистрибутиве уж очень богатые фильтры для less (lesspipe.sh), может там чего можно найти, не знаю...

Извините, ради бога!

а тебе именно html?

я вот выгонял достаточно сложные таблички (детализации и счета операторские) через XML+XSLT:FO с помощью fop(http://xmlgraphics.apache.org/fop/). оно, правда, явовское ...

HTML у меня уже готовый и даже в нужный размер попал (было непросто :) и выглядит разумно.

Я, конечно, могу сгенерировать на каком-то другом маркап-языке, но не хотелось бы вляпаться как с latex, вчера на него полдня потерял (нужные мне 1000 элементов на А5 - влезают).

нуу ... боюсь что таки да, несколько часов уйдет ... зато там в разЫ проще будет в размеры попадать, чем в html-е .... я как раз на него перешел, когда надоело с простым XSLT шаманить с выводом в html ...

Ну Х-З, если ничего не выйдет с вебкитом, туда тоже посмотрю, не догоню, так хоть согреюсь.

они влезают не в html, а в рендеринге MSOffice и в тех фонтах, что ты выбрал.
а в латехе поди и фонт был другой, например менее плотный.

Они и в рендеренге Firefox влезают, MSOffice я только как PDF-генератор использовал.

а что не так в рендеринге FF?

Я хочу чтобы йузер на вебе вбивал десяток цифирок и получал две пол-странички "отчета".
И не очень хочу давать эту табличку в HTML, хочу в PDF.

я про генерацию pdf, почему офис, почему не ff

X-сервер на сервере не хочу поднимать, но это единственная причина.

причем тут сервер?
ты посмотрел на html FF. почему ты им же не генерил PDF, а запускал для этого ворд, затаскивал туда HTML и только после этого генерил PDF?

Потому что туп, необразован и возможности "печатать PDF" в файрфоксных менюшках не нашел.

Под виндой такой красоты не видать.

А что, напечатать на принтер Adobe PDF не судьба (или Acrobat не установлен)?

Так это же Windows/Mac only?

Мне на сервер, на сервере FreeBSD.

Пожалуй, буду более конкретен еще
1) есть личное применение - пяток табличек А5, в кофр положить, тут и офисом можно и чем угодно
2) но сама по себе штука мне кажется полезной (ждите анонса :), а значит нужен веб-сервис.

Ну вот, начали про офис, кончили про FreeBSD (с этой дамой незнаком). Посмотрите в сторону ОпенОфис, может оттуда можно что прикрутить (под Win точно есть встроенная конверсия в PDF).

Вопрос задан в последней строчке поста:
Есть ли коммандлайновый (и юниксный) софт, который может срендерить HTML в PDF ?

И на самом деле мне посоветовали аж три: OpenOffice, Firefox и приладу на WebKit. Которую приладу мой сервер сейчас и компилирует....

Не, это Слава меня спросил, отчего я то что тестироал (3-я строчка поста) не выгонял в PDF прямо Firefox-ом.

И продолжаю ее там не видеть

тьфу в генерации

Значительное количество тяжелых решений (типа напечатать счетов абонентам опсоса) делаются через XSL:FO и какой-нибудь процессор. Я бы взял XEP, конечно, хотя бы за название (ну и за то что я там немного поработал). Можно взять fo2pdf, но он посасывал там и тут, зато совсем бесплатный.

Я использую https://xhtmlrenderer.dev.java.net/ для конвертирования xhtml в pdf. У них в примерах есть java скрипт, который работает с командной строкой.

К комментарию выше могу лишь добавить, что славная библиотека wv сейчас всем советует переходить на AbiWord:

wvPDF: converts word to Adobe PDF. Use "AbiWord --to=pdf" or "AbiWord --print=file.ps && ps2pdf file.ps" instead.

Ну, а так как AbiWord понимает html, то можно прямо сразу html -> pdf.

Спасибо за наводку! Вероятно, правильно будет дать и эту ссылку (находится на 1 минуту, но всё же): http://www.abisource.com/wiki/AbiCommand

Ой, на здоровье, Такэси Кикудзирович! :-)
У меня ссылок - хоть отбавляй!
"ищущий да обрящет"

Я совсем дилетант, но очень хочу спросить: а через генерилку PDF встроенную в MacOS это нельзя сделать?

У меня на "онлайн-версии" (которая когда-то будет) - FreeBSD 6.

Я бы попробовал тривиальный вариант - засунул HTML внутрь Joomla или WordPress, а они уже умеют из HTML PDF делать.

Про unoconv уже говорили, нет?

Спасибо за совет, но он стили совсем не понимает....

Можно на Apache FOP сделать, правда когда я на него смотрел (лет 5 назад) таблицы он верстал похабно. Возможно сейчас лучше стал