Athena: Точный экспорт веб-страниц в PDF
Мне потребовалось выдать заказчику нашу документацию по API, сгенерированную из Open API.
Когда я попробовал экспортировать сгенерированные в bootprint-openapi страницы с помощью pandoc или через импорт в MS Office или Libre Office, на результат нельзя было смотреть без слез - поехавшие или вообще исчезнувшие таблицы. Возможно, это было из-за бага в bootprint-openapi который я позднее нашел и поправил, теперь уже не выяснить.
Ковыряться в bootprint-openapi, чтобы попытаться создавать такой html, который будет конвертироваться без глюков, казалось совершенно бесперспективным и тяжким по времени занятием (я форкнул bootprint-openapi для русификации, но одно дело перевести на русский handle bars, что заняло не более получаса, и другое - ковыряться в html и css).
И тут я нашел совершенно изумительную вещь Athena Elegant PDF conversion.
Изумительна она по двум причинам.
Во-1х она безукоризненно конвертирует веб-страницы в PDF. Все выглядит точно, как в веб-браузере, что и не удивительно, потому что она вызывает браузер и снимает картинку с него.
Во-2х ребята все сделали для того, чтобы их продукт было чрезвычайно легко использовать.
Хотите сервис, который конвертирует на лету - ок:
docker pull arachnysdocker/athenapdf-service
http://<docker-address>:8080/convert?auth=arachnys-weaver&url=http://blog.arachnys.com/
Мне было рациональнее конвертировать файлы заранее (athena работает достаточно быстро, но это все-таки долгие 1-2 секунды на конвертацию каждого из моих файлов).
Поэтому я добавил в Makefile:
for API in docker/docs/target/*/; \
do docker run --rm -v ${PWD}:/converted/ arachnysdocker/athenapdf athenapdf $${API}/index.html $${API}/$$(basename $${API}).pdf; \
done
Немного огорчает, что из нее сыпятся ошибки
Xlib: extension "RANDR" missing on display ":99".
Но это никак не влияет на результат, поэтому я не стал разбираться, с чем это связано.
И еще надо учитывать вот этот баг в Electron, на котором написана Athena Duplication of thead, and other table related issues
Я это делаю так:
sed -i "\$athead {display:table-row-group;}" /docs/$API/main.css
Не устаю восхищаться docker, который сделал это возможным - одна строка (две, с учетом workaround для бага) и непростая задача решена!