首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用浏览器的(chrome/firefox) HTML/CSS/JS渲染引擎来生成PDF?

如何使用浏览器的(chrome/firefox) HTML/CSS/JS渲染引擎来生成PDF?
EN

Stack Overflow用户
提问于 2014-08-30 02:23:26
回答 2查看 14.2K关注 0票数 25

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

  1. http://wkhtmltopdf.org/ (开放source)
  2. https://code.google.com/p/flying-saucer/ (开放source)
  3. http://cssbox.sourceforge.net/ (不一定是直接的pdf generation)
  4. http://phantomjs.org/ )(开放源码允许pdf output)
  5. http://www.princexml.com/ (商业但传给there)
  6. https://thepdfapi.com/最好的一种)来自

的chrome修改以从html中吐出pdf

我想编程控制chrome或firefox浏览器(因为它们都是跨平台的),让它们加载网页,运行脚本,设置页面样式,并生成用于打印的pdf文件。

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

渲染到pdf文件到render.html out.pdf

我可以通过浏览页面,然后将其打印到pdf,然后在pdf文件上获得准确的、100%符合规范的渲染html/css/js页面,从而轻松完成这项工作。甚至可以通过浏览器中的配置选项在pdf中省略url报头。但是,我该如何开始尝试自动化这个过程呢?

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

我做了很多研究,我只是不知道如何提出正确的问题。我想以编程的方式控制浏览器,也许就像selenium那样,但直到我将网页导出为PDF (因此使用浏览器的渲染功能来生成良好的PDF)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-21 04:32:57

火狐有一个API方法可以做到这一点:https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/saveAsPDF

browser.tabs.saveAsPDF({})
  .then((status) => {
    console.log('PDF file status: ' + status);
  });

然而,它似乎只对Browser Extensions可用,不能从网页调用。

我仍然在寻找一个公共API来实现这一点。

票数 1
EN

Stack Overflow用户

发布于 2014-08-30 11:44:03

我不是专家,但PhamtomJS似乎是适合这项工作的工具。不过,我不确定它使用的是什么无头浏览器(我猜是chrome/chrome)

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

希望能有所帮助。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25574082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档