当前位置: 首页 > news >正文

phantomjs技巧之将html页面转换为pdf文件

需求

很多时候我们需要将一些网页转换为pdf,比如开发人员需要为每个客户提供一份运维周报,周报一般是html的页面,但是为了能够永久记录存储,需要将周报转换为pdf格式的文件,pdf一方面便于阅览,另一方面也便于打印出来。所以本文研究如何通过phantomjs将一个html的页面转换为pdf文件。

编写pdfconvert.js代码

1. 先确定pdf输出格式

  • 页面格式(format):A3/A4/A5/letter
  • 页眉/页脚(header/footer):true or false
  • 页面方向(orientation):portrait/landscape
  • 页边距(margin)
    -浏览器窗口大小(viewportSize)

2. 参数输入输出

  • 输入:url地址
  • 输出:文件名

3. 具体代码(以A4纸输出为例)

var page = require( 'webpage' ).create();
var oss_url, out_pdf;
var system = require('system')
oss_url = system.args[1];  //输入,系统参数
out_pdf = system.args[2]; //输出, 系统参数

page.viewportSize = { width: 1024, height: 800 };  //viewport size

page.paperSize = {
        format: 'A4',
        orientation: 'portrait',
        margin: '1cm',  //页边距
        header: { //如果不需要,可以不用添加
                height: '1cm',
                contents: phantom.callback(function(pageNum, numPages) {
                       //返回页眉的代码逻辑
                       }
                })
        },
        footer: { //如果不需要,可以不用添加
                height: '1cm',
                contents: phantom.callback(function(pageNum, numPages) {
                        //返回页脚的代码逻辑
                        }
                })
        }
};

page.open( oss_url, function( status ) {
                window.setTimeout(function() {
                        if ( status === "success" ) {
                                page.render(out_pdf);
                        }
                        phantom.exit();
                        }, 300); //超时设置
});

后端代码

        url := os.Args[1]
        out_pdf := os.Args[2]
        cmd := exec.Command("./phantomjs", "pdfconvertor.js", url, out_pdf)
        cmd.Stdout = os.Stdout
        cmd.Run()

相关文章:

  • 完毕port(CompletionPort)具体解释 - 手把手教你玩转网络编程系列之三
  • 入门到进阶:最全面Vim快捷键键位图
  • github帐号及文章选题
  • 【Datastage】NULL VALUE TO A NOT NULL VALUE
  • MongoDB-3.4安装文档
  • C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现
  • bug给你带来的四个好处
  • C++中怎样获取类成员的指针
  • lol盒子重点内容
  • 安卓逆向系列教程 4.6 去广告
  • Myeclipse安装SVN插件
  • 王国维读书三大境界
  • dubbo异常: Failed to invoke the method getFormulaZtree in the service 异常解决方案
  • 多行文本溢出显示省略号(…)全攻略
  • MySQL 最基本的SQL语法/语句
  • Android系统模拟器绘制实现概述
  • C++类的相互关联
  • echarts花样作死的坑
  • Javascript基础之Array数组API
  • leetcode-27. Remove Element
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • uva 10370 Above Average
  • ViewService——一种保证客户端与服务端同步的方法
  • 聚类分析——Kmeans
  • 如何使用 JavaScript 解析 URL
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 栈实现走出迷宫(C++)
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • elasticsearch-head插件安装
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (06)金属布线——为半导体注入生命的连接
  • (13)Hive调优——动态分区导致的小文件问题
  • (C语言)字符分类函数
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (七)Knockout 创建自定义绑定
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (四) Graphivz 颜色选择
  • (转)为C# Windows服务添加安装程序
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .naturalWidth 和naturalHeight属性,
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net 按比例显示图片的缩略图
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 反射的使用
  • .NET和.COM和.CN域名区别
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET是什么
  • .net专家(高海东的专栏)
  • .pyc文件是什么?
  • .so文件(linux系统)
  • [BZOJ1008][HNOI2008]越狱
  • [codeforces]Checkpoints