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 для бага) и непростая задача решена!

Опубликовано November 7, 2016