最近有一个将微信公众号的文章转为pdf的想法,主要是为了将很多文章保存下来,方便打印阅读。

最终使用的方法是phantomjs来生成网页的pdf。

PhantomJS 是一个基于WebKit的服务器端 JavaScript API。它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG。PhantomJS可以用于页面自动化,网络监测,网页截屏,以及无界面测试等。

使用方法:
进入phantomjs可执行文件目录,执行

>phantomjs.exe render_pdf.js https://mp.weixin.qq.com/s/CFVZAyEFat2n6U2UAOhbyA test.pdf

转换长图片类似

>phantomjs.exe render_pdf.js https://mp.weixin.qq.com/s/CFVZAyEFat2n6U2UAOhbyA test.png

需要先安装好phantomjs,在phantomjs可执行文件目录编写render_pdf.js。

全部代码如下:
render_pdf.js

var page = require('webpage').create(),system = require('system'),address, output, size;if (system.args.length < 3 || system.args.length > 5) {console.log('Usage: rasterize.js URL filename');phantom.exit(1);
} else {address = system.args[1];output = system.args[2];console.log(page.settings.userAgent );// 不加分页的话,只输出一页pdf,底部会有大量空白。//google "phantomjs render pdf bottom blank" 可以看到别人也报过这种bug// 最终查找Phantomjs generates multiple page PDF 竟然解决了问题page.paperSize = { format: 'A4', orientation: 'portrait', margin: '0.8cm' };// page.viewportSize = { width: 600, height: 800 };console.log("open page now");page.open(address, function (status) {console.log(status);//evaluate注册一个回调函数,页面加载完就执行。用来操作页面中的DOM元素//修改微信公众号文章中图片lazy load的方式var size = page.evaluate(function () {//此函数在目标页面执行的,上下文环境非本phantomjs,所以不能用到这个js中其他变量//这个控制台打印的效果在phantomjs执行界面看不到console.log('start image lazy loading');var imgs = document.getElementsByTagName('img');var size = 0;console.log(size);for (var i = imgs.length - 1; i >= 0; i--) {var data_src = imgs[i].getAttribute("data-src");if (data_src){imgs[i].setAttribute("src", data_src);size++;}}return size;} );console.log("change lazy load img number:" + size);// 预留一定的渲染时间window.setTimeout(function () {page.render(output);page.close();console.log('render ok');phantom.exit();}, 5000);});
};
// phantom.exit();

最终生成的pdf渲染效果良好,无排版错乱。

使用phantomjs将网页转换成pdf或者长图片相关推荐

  1. 在 Linux 中把一个网页转换成 PDF的技巧介绍

    你如何在 Linux 中把一个网页转换成 PDF?你可以选择使用每个 Linux 发行版上的网页浏览器(GUI),或者使用终端将网页变成 PDF 文件. 在这里,我将提到这两种方法来帮助你完成工作. ...

  2. 将图片直接转换成xml文件_如何将jpg在线转换成pdf?jpg图片可以转换成pdf吗?

    可不要以为jpg就一定只是一张简单的图片,一张图片中可以包含的信息是很多的,除了有景象之外,也可能会有文字,有表格.当然,我们今天要讨论的,并不是一张jpg的图片中可能会存在哪些信息,而是要如何将jp ...

  3. Vue 如何将网页转换成PDF实现步骤以及问题解决:

    实现步骤:(只想了解vue实现的不用看方法一,直接看二) 方法1: 使用node.js和puppeteer(谷歌自动检测工具),由于第一种尝试结果不太理想,所以我直接粗略讲解:(原代码实现如下,依赖包 ...

  4. 1604_linux环境下使用命令行把网页转换成pdf

    全部学习汇总: GreyZhang/toolbox: 常用的工具使用查询,非教程,仅作为自我参考! (github.com) 使用的工具很容易在彼此之间产生隔离性障碍,比如我最近使用的墨水屏阅读的最合 ...

  5. php 网页转换成pdf,PHP html 转换成PDF wkhtmltopdf HTML 转换成 PDF

    因为涉及到账单,并且要生成PDF并发送邮件,所以试用了好多转换PDF的都不成功,基本上都是格式错乱,唯一就是 wkhtmltopdf 满足 我的需求 安装环境 CENTOS 7.3 下载及安装 wge ...

  6. 如何将jpg转换成pdf格式的图片

    现在的工作内容不仅仅只是编辑文章,整理数据了,掌握文件之间的格式转换也非常的重要,接触的文件类型越多,需要掌握的方法也就越多,那么怎么实现文件转换呢?下面以如何把jpg转换成pdf图片格式为例. 图片 ...

  7. 怎么把JPG转换成PDF格式?图片批量转换PDF的简单方法

    文件格式的转换在我们的工作中扮演了非常重要的角色,比如怎么把JPG转换成PDF格式?如果可以轻松的解决文件格式转换问题,相信大家的工作效率也会提高很多.如果有小伙伴不知道如何转换,那么小编分享一个不用 ...

  8. 用c语言怎样将swf转化为pdf,利用ABCpdf.NET将网页转换成PDF的方法小结

    中转方式: 大多数时候,都是使用WebBrowser空间,将网页截图,然后插入PDF文件,另外也可以将网页先保存为Word文件,然后再从Word转PDF. PDF虚拟打印机: 还有一种方式,就是使用虚 ...

  9. Win10 中将网页转换成pdf的简便方法

    注意:该方法不是将网页完整地保存下来,而是选取其中主要的文字信息. (1)打开要保存的网页 (2)按快捷键 Ctrl+P 打开打印界面 (3)选择打印机为 "Microsoft Print ...

  10. html长图转换成pdf,将长 html 导入拆分 PDF

    我的情况是: 单击按钮时,将 html 上的数据导入 PDF 文件. 由于此 PDF 必须具有一些复杂的必需样式,因此我的第一步是使用 html2canvas.js 将此页面转换为图像,然后使用 js ...

最新文章

  1. 丘成桐:中国人可以做世界一流学者
  2. java学习之借书系统
  3. 浅谈Java中的final关键字
  4. 先了解一下Shiro安全框架
  5. 二、华为云ModelArts零代码实现美食分类识别
  6. python中long类型_浅谈python 四种数值类型(int,long,float,complex)
  7. 三十六、【减小apk包的体积】
  8. 【英语学习】【English L06】U05 Appointments L3 Can I cancel my reservation?
  9. MyBatis 中的mapper.xml详解
  10. DataX不支持Mysql8.x
  11. 学计算机编程会秃头吗,编程真的容易导致秃顶么?
  12. DataTable数据集动态构造Table表结构
  13. ps: 如何调出辅助线
  14. 世界十大名言是什么?
  15. 华硕 梅林系统 wan FTP 端口转发
  16. iOS开发:如何使用ShareSDK让APP快速拥有分享功能
  17. Java Lambda(语言篇——lambda,方法引用,目标类型,默认方法,函数接口,变量捕获)
  18. 脑电波技术的前途光明吗?
  19. 【Git常用】之回滚
  20. RS422管脚定义说明

热门文章

  1. QGIS制图:矢量数据制图流程及导出
  2. IT大咖总结的面试真经
  3. 获取代理IP的三种途径
  4. 【javaEE】——多线程进阶(锁策略:面试相关考点)04
  5. 抠图算法(交互式)以及证件照的自动抠图
  6. RS485模块的介绍及引脚连线说明
  7. [配置] minGW32 安装与环境配置
  8. C++ Http下载文件
  9. cad快看_有石CAD自动下单排版软件,让你的CAD都比别人强!
  10. linux pe ef 详解,PE工具列表(看雪學院)