Как использовать механизм браузера (chrome/firefox) HTML/CSS/JS для создания PDF файла?

Есть хорошие проекты, которые генерируют pdf из файлов html/css/js

  1. http://wkhtmltopdf.org/  (с открытым исходным кодом)
  2. https://code.google.com/p/flying-saucer/  (с открытым исходным кодом)
  3. http://cssbox.sourceforge.net/  (необязательно прямая генерация PDF)
  4. http://phantomjs.org/  (с открытым исходным кодом позволяет вывод PDF)
  5. http://www.princexml.com/  (коммерческий, но вручает лучший там)
  6. https://thepdfapi.com/  модификация Chrome, чтобы плевать PDF из HTML из

Я хочу программно управлять браузером Chrome или Firefox (потому что они оба кроссплатформенные), чтобы они загружали веб-страницу, запускали сценарии и стилизировали страницу и генерировали файл PDF для печати.

Но как мне начать с автоматического управления браузером, чтобы я мог сделать что-то вроде

render-to-pdf file-to-render.html out.pdf

Я легко могу выполнить эту работу вручную, просмотрев страницу, а затем распечатав ее в формате pdf, и я получу точную, полностью соответствующую спецификации страницу в формате html/css/js в файле PDF. Даже заголовки URL могут быть опущены в pdf через параметры конфигурации в браузере. Но опять же, как мне начать пытаться автоматизировать этот процесс?

Я хочу автоматизировать на стороне сервера открытие браузера, переход на страницу и создание PDF файла с использованием страницы, отображаемой браузером.

Я провел много исследований, я просто не знаю, как сделать правильный вопрос. Я хочу программно управлять браузером, возможно, как селен, но до такой степени, что я экспортирую веб-страницу в формате PDF (следовательно, используя возможности рендеринга браузера для создания хороших PDF файлов)

Ответы

Ответ 2

Я не эксперт, но PhamtomJS кажется правильным инструментом для этой работы. Я не уверен, хотя о том, какой браузер без браузера он использует внизу (я думаю, это хром/хром)

var page = require('webpage').create();
page.open('http://github.com/', function() {
     var s = page.evaluate(function() {
         var body = document.body,
             html = document.documentElement;

        var height = Math.max( body.scrollHeight, body.offsetHeight, 
            html.clientHeight, html.scrollHeight, html.offsetHeight );
        var width = Math.max( body.scrollWidth, body.offsetWidth, 
            html.clientWidth, html.scrollWidth, html.offsetWidth );
        return {width: width, height: height}
    });

    console.log(JSON.stringify(s));

    // so it fit ins a single page
    page.paperSize = {
        width: "1980px",
        height: s.height + "px",
        margin: {
            top: '50px',
            left: '20px'
        }
    };

    page.render('github.pdf');
    phantom.exit();
});

Надеюсь, что это поможет.