如何使用浏览器的HTML/CSS/JS呈现引擎生成PDF?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (346)

有一些不错的项目可以从html/css/js文件生成pdf。

  1. http://wkhtmltopdf.org/(开放源码)
  2. https://code.google.com/p/fling-茶碟/(开放源码)
  3. 网址:http://cssbox.Sourcebean.net/(不一定是直接生成pdf)
  4. http://幻影js.org/(开放源码允许pdf输出)
  5. http://www.princexml.com/(商业杂志,但把最好的一个放在那里)

我想通过编程控制Chrome或Firefox浏览器(因为它们都是跨平台的),让它们加载一个网页,运行脚本和页面样式,并生成一个pdf文件供打印。

但是,我如何开始以自动化的方式控制浏览器,这样我就可以做一些类似的事情

呈现到-pdf文件到-render.html out.pdf

我可以轻松地通过浏览页面,然后打印成pdf,我得到一个准确的,100%规范兼容的HTML/css/js页面上的pdf文件。即使是url标题也可以通过浏览器中的配置选项在pdf中省略。但是,我如何开始尝试自动化这个过程呢?

我想在服务器端自动打开浏览器,导航到页面,并使用浏览器呈现的页面生成pdf。

我做了很多研究,只是不知道如何提出正确的问题。我想通过编程控制浏览器,也许像Selenium一样,但是我将网页导出为PDF(因此使用浏览器的呈现功能来生成良好的pdfs)。

提问于
用户回答回答于

PhamtomJS似乎是这份工作的合适工具。不过,我不知道它在下面使用的是什么无头浏览器(我猜它是chrome/chromium)。

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();
});

扫码关注云+社区

领取腾讯云代金券