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 уделать, но я пока приостановился, вернусь когда важно станет.
А в чем проблема сделать отдельный сервис для генерации? Он тогда не будет зависеть от фреймворка, браузера и тд.
Headless Chrome форева!
golang
1) я использовал сначала headless Libre Office для конвертации .odt в .pdf
2) сейчас используется Gotenberg - быстрее чем (1) т.к. этот office держит всегда в памяти не запуская каждый раз заново
Похоже, у каждого свой опыт. Мне надо было пачками md конвертировать в pdf. Адекватный результат получился только с WeasyPrint. Были надежды на Playwright, но он выдавал ерунду какую-то заявляя "и так сойдет" (с).
Отказываемся от wkhtmltopdf: как мы искали решение для генерации нетривиальных PDF