LINUX.ORG.RU

Массовая генерация PDF true linux way

 , , ,


1

1

Есть данные о начислениях по квартплате для 300к человек в БД. Надо сделать из них платёжку на 1-3 листа А4 в pdf. Чем кошерно будет это сделать? Сейчас всё работает на fastreports в дельфи и jasperreports, но один документ делается 2+ секунд и занимает это около суток да и стрёмно всё это как-то.
Хочется следующего: данные из бд перегоняются в пригодный вид, дальше скармливаются шаблонизатору, тот делает tex/md/etc документ из которого делается pdf. Хочется, чтобы всё, кроме бд занимало <50 мс. Есть истории успеха?

300к человек

один документ делается 2+ секунд

занимает это около суток

Что-то не сходится. Должно занимать 600'000/86'400 = 7 дней

Crocodoom ★★★★★
()

Можно сделать шаблон в LaTeX, сгенерировать pdf, после чего в итоговом документе заменять нужные поля обычной заменой.

Deleted
()
Ответ на: комментарий от crutch_master

Может, добавить ещё ядер и не париться?

Deleted
()
Ответ на: комментарий от Deleted

Можно сделать шаблон в LaTeX, сгенерировать pdf, после чего в итоговом документе заменять нужные поля обычной заменой.

Разве pdf - текстовой? Да и документ может быть разной длинны, не пойдёт скорее всего. Там qr коды еще надо запихивать.

crutch_master ★★★★★
() автор топика
Последнее исправление: crutch_master (всего исправлений: 2)

Попробуй asciidoctor-pdf – он точно быстрее чем (xe|lua)latex потому как тупее. Но вот будет ли укладываться в <50ms хз.

Я на нем делаю «бизнесовые» :) документы, ну и свои платежки тоже. Правда у меня к своим докам нет таких жестких требований.

habamax ★★★
()
Ответ на: комментарий от crutch_master

Стоп, не увидел пожелание про скорость работы самой программы - не выйдет, латех будет компилировать около секунды, а может и больше от объема зависит.

Silerus ★★★★
()
Последнее исправление: Silerus (всего исправлений: 1)
Ответ на: комментарий от crutch_master

А чего так мало? Арендуй мощности на амазоне, если своих нет

Crocodoom ★★★★★
()
Ответ на: комментарий от Silerus

латех будет компилировать около секунды, а может и больше от объема

один документ делается 2+ секунд

А сколько генерируется PDF-документ, в котором сотня платёжек? Вот уверен, что не 200 секунд, а много меньше. Тот же LaTeX очень много времени тратит на компилирование documentclass и прочее и прочее. Классы и стили в платёжках одинаковы, так что... А нарезать PDF потом всегда успеешь.

Есть и более прямой способ, что-то вроде pre-compiled headers для LaTeX. Но это для продвинутых

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

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

Silerus ★★★★
()
Ответ на: комментарий от Crocodoom

Классы и стили в платёжках одинаковы, так что... А нарезать PDF потом всегда успеешь.

Тогда он в один поток будет это компилировать.

aquadon ★★★★★
()
Ответ на: комментарий от Crocodoom

Да хз. Резать бы не очень хотелось. Надо попробовать latex, вроде когда я что-то тестил он работал намного меньше двух секунд. С md может что-то есть? Хотя я не уверен, что мне хватит md, чтобы всё разметить.

crutch_master ★★★★★
() автор топика
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от Crocodoom

Я имел в виду, что объединив платежки в один документ мы получим выигрыш по процессорному времени (в пересчете на компиляцию одной платежки), но не сможем распараллелить это на все его ядра.

aquadon ★★★★★
()
Ответ на: комментарий от aquadon

Как же не сможем, когда сможем? Дано: 300к платёжек, 16 ядер.

Разбиваем все платежки на группы по 100 штук и компилим. Можно будет загрузить 3000 ядер параллельно, а уж 16 и подавно.

Crocodoom ★★★★★
()

Сгенерируй по шаблону в markdown или простым текстом, а потом через pandoc сделай PDF. Можешь ещё через convert из imagemagick попробовать. Или ты хочешь готовое решение от начала до конца?

Quasar ★★★★★
()
Ответ на: комментарий от Deleted

LaTeX для такой задачи - как из пушки по воробьям.

Quasar ★★★★★
()
Ответ на: комментарий от Quasar

Или ты хочешь готовое решение от начала до конца?

Не обязательно. Pandoc - это markdown или он еще что-то умеет?

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Pandoc - это универсальный конвертер форматов и языков описания документов. Умеет много чего: от примитивного ASCII до очень сложных ODF и DOCX. Его частенько используют для того, чтобы из markdown сделать pdf.

Quasar ★★★★★
()
Ответ на: комментарий от Quasar

pandoc не умеет в pdf сам. Ему нужен бэкэнд – latex, pdfroff, wkhtml2pdf и что-то еще

habamax ★★★
()
Ответ на: комментарий от crutch_master

pandoc в pdf будет точно дольше чем чистых латех в пдф – из коробки. Это если ты не укажешь другой (не латех бэкенд) для пандока.

Потому как у пандока есть дефолтный шаблон default.latex, в котором подключается туева хуча пакетов, которые тебе может и не нужны. В голом латехе можешь написать/подключить так как тебе надо. (Справедливости ради, этот default.latex ты можешь подменить своим)

habamax ★★★
()

Насколько часто меняется формат платежек? И какие к их формату есть требования?

Если меняются достаточно редко и есть знания о C/C++, то можно попробовать заюзать какую-нибудь низкоуровневую библиотеку, типа cairo или skia.

У них скорость генерации pdf будет максимальной.

anonymous
()

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

bass ★★★★★
()
Ответ на: комментарий от bass

более того, что делать с этими потенциальными

300k pdf? их почтой (электронной) отправляют, записывают в папочку?

sshestov
()

я написал свою систему генерации латех документа по шаблону. могу поделиться.

MikeDM ★★★★★
()
Ответ на: комментарий от crutch_master

Меняются иногда, настолько хардкодить на чём-либо не охота. Надо что-то среднее.

Ну тут уж нужно смотреть по собственным силам/производсвенной неоходимости. Ускорить генерацию можно многократно.

Кстати, пришла интересная идея. Если в пандоках и прочем основное время тратится на вычитывание тонны скриптов и конфигов, то, возможно, можно ускорить процесс если в один pdf документ пихать сразу несколько платежек, а затем этот большой документ делить на части какими-то внешними утилитами. Напр., podofoimpose (хотя конкретно ее я не советую. Написана фигово, документация — по исходникам и т.п. Но за отправную точку можно взять и ее)

anonymous
()
Ответ на: комментарий от anonymous

И еще, никто почему-то не посоветовал wkhtmltopdf. Прикидывая, как выглядят платежки, я думаю можно легко набацать html тупой табличной версткой, как деды завещали. Если будет несложный html без тонны скриптов и js, то должно работать быстро. Хотя, до 50мс все равно не дотянет.

anonymous
()
Ответ на: комментарий от AlexVR

И смысл оптимизировать первую фазу при такой-то второй и третьей?

t184256 ★★★★★
()
Ответ на: комментарий от bass

а дальше что с этим платёжками? по почте рассылаются?

Что-то рассылают, что-то выдают по запросу, остальное складывают в папочку и архивируют. Рассылают мало т.к. они не всем нужны. Народ мало волнует за что они сколько платят.

crutch_master ★★★★★
() автор топика
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от MikeDM

я написал свою систему генерации латех документа по шаблону. могу поделиться.

Ну, скидывай, если не трудно. На чём она и за сколько отрабатывает?

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

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

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.