Pull to refresh

Comments 8

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

Сначала казалось, что выход в pdf. Решал в go (react-клиент у меня легкий). Тоже нашел решение с бинарником, но сразу не хотел тащить в свой код. Далее учился рисовать pdf - не зашло. Потом видел решение, где данные отдельным слоем поверх старого накладывают - большой размер файла и было не решено. Еще слышал, как для преобразования word->pdf поднимают виртуалку с мс-офисом и запускают скрипт.

Конкретно я нашел решение в html - шаблон листовки встраивается в go-код через embed. Вставка текста в шаблоне очень быстрая - я на лету генерирую файлы, даже не стал заморачиваться с хранением в s3, асинхронщиной и состояниями. Основное время тратится на генерацию qr-кода.

На клиент передаю html. Дальше пользователь может сохранить в pdf из браузера. И внезапно оказалось, что pdf привычен, но не особо нужен - статичный html открывается легко везде, и имеет кучу настроек "на печать". PDF к такому html еще шрифт добавляет, и вырастает с 5КБ до 150КБ - на тысяче сгенерированных файлов уже заметно ;)

Наверно, можно "печатать" через браузер. Если не через клиентский, то настроить виртуальный принтер в какой-то форме, но я пока за минимальное решение. И еще не возвращался к такой задаче.

Да, но цифровой подписью принято подписывать PDF, а не HTML

PDF привязан к формату страницы, а HTML это адаптивная верстка

Кстати да, госключом можно только pdf/картинку/text подписать - переименовал zip-архив в jpg и подписал ;)
В самом начале писал, что "решал похожую задачу" - у кого-то другие задачи, это обычное явление. Важно, что в go-окружении (js оставил легким клиентом, а java не смотрел) можно рисовать pdf, но это типа по канве рисовать - для бекендера не нативно и больно. Потому html удобный промежуточный вариант, особенно в виде документа. Потом можно в pdf уделать, но я пока приостановился, вернусь когда важно станет.

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

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

Headless Chrome форева!

golang
1) я использовал сначала headless Libre Office для конвертации .odt в .pdf
2) сейчас используется Gotenberg - быстрее чем (1) т.к. этот office держит всегда в памяти не запуская каждый раз заново

Похоже, у каждого свой опыт. Мне надо было пачками md конвертировать в pdf. Адекватный результат получился только с WeasyPrint. Были надежды на Playwright, но он выдавал ерунду какую-то заявляя "и так сойдет" (с).

Sign up to leave a comment.

Articles