调用Phantomjs,通过html生成pdf

1.安装phantomjs

下载页面
一般解压就能用

2.页面准备

略过,页面自己画或者找网上的

3.phantomjs脚本

var page = require('webpage').create(),
    system = require('system')
    , args = system.args
    , templatePath = args.length > 1 ? args[1] : '/tmp/export' //模板文件地址
    , filename = args.length > 2 ? args[2] : 'tmp.pdf';

if (args.length < 3) {
    console.log('参数不足');
    phantom.exit();
}

var width = 1024;
var height = 768;

page.viewportSize = {
    width: width,
    height: height
};
page.paperSize = {
    format: 'A4', //A4 纸张 21*29.7cm
    // width:"1024px",
    // height:"768px",
    orientation: 'portrait',
    // margin: '0.84cm'
};
page.zoomFactor = 0.5;//放大比例
page.settings.loadImages = true;
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36';

page.open(templatePath, function (status) {
    if (status == 'success') {
        console.log('load html ' + templatePath + ' success');
        window.setTimeout(function () {
            page.render(filename);
            console.log('create '+filename+ ' success');
            phantom.exit();
        }, 1000);

    } else {
        console.log('faild');
    }

})

核心
var page = require('webpage').create()
system.args是脚本命令传参的参数数组
page.open(templatePath, function (status) 打开一个链接(可以是本地 file:///xxxxxx.html),并在打开后回调
page.render(filename);截图并生成文件
phantom.exit();退出,一定要退出,不退出进程一直在

4.执行命令

cmd

bin目录下 -> phantomjs 脚本.js html文件路径 需要生成的文件名

shell

bin目录下 phantomjs 给权限 chmod 777 phantomjs 然后
phantomjs 脚本.js html文件路径 需要生成的文件名


如果是代码调用,尽可能使用全路径因为环境变量没加载进来

5.注意事项

  • 自己编写的html中如果包含js,检查js语法不能使用es6及以上,不支持会报错
  • 截图后文件是pdf可以生成pdf,但是pdf是有页码的,如果不想拦腰截断页面,最好自己控制好高度
  • windows预览和linux是完全不一样的,windows调好了linux直接css大变样
  • liunx使用时如果需要中文得安装字体,一般黑体就行。安装宋体报错,原因未知。centos7,8一样的错误
  • pdf文件名不能有空格,尽可能给正常的英文名如uuid

6.参考

老规矩直接上代码
案例下载


举例:cd到pdf目录
D:/Program Files/phantomjs-2.1.1-windows/bin/phantomjs printpdf.js template.html test.pdf

推荐阅读更多精彩内容