在Nodejs中生成PDF

时间:2016-04-22 07:02:57

标签: node.js pdf phantomjs

我有需要在哪里需要从节点中的html创建PDF。除此之外,我必须能够添加自定义页眉和页脚。然后,网页的内容应该基于自定义要求在多个页面中。那就是我们必须能够决定哪个内容应该是哪个页面。 搜索后我发现了一些像幻影这样的解决方案,但没有适当的文档可以帮助我。 我需要一些方法来做到这一点。 找到了解决方案 here,但解释不够好。

1 个答案:

答案 0 :(得分:0)

我一直在使用https://github.com/baudehlo/node-phantom-simple模块和webshot

步骤I: -

  • 使用node-phantom-simple
  • 创建HTML
  • 创建HTML后,使用HTML将其传递给webshot。

var driver = require('node-phantom-simple');
var webshot = require('webshot');



driver.create({path: require('phantomjs').path, 'parameters': {'disk-cache': 'yes'}}, function (err, browser) {
        return browser.createPage(function (err, page) {
            return page.open(url, function (err, status) {
                console.log("opened site? ", status,page.content);
                 return page.evaluate(File.cleanHtml, function (err, html) {

                      var options = {
                        streamType: 'pdf',
                        screenSize: {
                            width: 1200,
                            height: 300
                        },
                        shotSize: {
                            width: 1200,
                            height: 300
                        },
                        siteType:'html',// include this to generate PDF from html
                        phantomConfig: {'ssl-protocol':'any','ignore-ssl-errors': 'true'}
                      } 

                      var pdfname = 'test_' + Date.now() + '.pdf';

                      webshot(html,pdfname,options, function(err) {
                        console.log("err in webshot",err);  
                      })
                    });
                // });
            });
        });
    });

这里File.cleanHtml是我创建的一个函数,用于从HTML中删除额外的内容。你可以直接从这个函数返回相同的HTML。可能是这样的:)

    cleanHtml: function () {
        var data = $("html");
        return "<html>" + data.html() + "</html>";
    }