Обновление 2019-05
К счастью, весь процесс упакован в образ докера TheCodingMachine: https://github.com/thecodingmachine/gotenberg
Это делает обслуживание и использование генерации PDF на основе хрома в производственных средах действительно плавным и беспроблемным.
С Chrome 59 появился новый режим безголового управления. Поскольку все другие решения действительно борются с более новыми (или уже не такими новыми) функциями CSS, такими как flexbox, в моем случае это было единственное решение для получения правильного вывода PDF.
Чтобы создать pdf из локального html-файла, используйте следующую команду:
chrome --headless --disable-gpu --print-to-pdf file:///path/to/myfile.html
.
Для Mac OS chrome
с /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
.
Единственный недостаток, который я заметил до сих пор, это то, что (в настоящее время) вы не можете передать html через stdin, но создание временного файла не так уж и большая проблема.
Для получения дополнительной информации см. https://developers.google.com/web/updates/2017/04/headless-chrome#create_a_pdf_dom
Обновление: как выясняется, ребята из Chrome, скорее всего, предоставят какой-то узел модуля узла для этой задачи, что в конечном итоге приведет к устареванию режима без головы (https://bugs.chromium.org/p/chromium/issues/detail?id=719921).
Лучше всего было бы использовать подход на основе узлов с использованием кукловода
модуль, как описано в https://developers.google.com/web/updates/2017/04/headless-chrome#node, и распечатайте страницу с помощью команды Page.printToPDF, которая также позволяет выполнить некоторые дополнительные настройки.
Конечно, вы можете подключиться к веб-сокету отладочной консоли из любой другой среды, кроме узла (например, PHP-скрипт).