1.场景与需求 自动化场景:浏览器自动化填表 基 本 需 求:将浏览器访问网页静默打印输出为PDF文件; 应 用 场 景:如自动化网络核查、网页文章下载等! 2.存在问题 2.1直接问题 直接使用浏览器打印功能无法达到静默打印效果,会出现打印弹窗; 2.2衍生问题 本地运行时无法实现后台自动化; 无法实现多线程任务运行; 3.解决方案 当时写自动化网核的时候被这个问题困住了好几天,先后大概尝试了三种解决方案,分别是:wkhtmltopdf、浏览器插件保存网页、Chrome DevTools Protocol;三种方案都可以实现后台静默输出网页为PDF,但最终我选择了Chrome DevTools Protocol,大致的历程如下: 3.1 wkhtmltopdf 3.1.1 wk简介 官方介绍:wkhtmltopdf和是开源的(LGPLv3)命令行工具,使用Qt WebKit渲染引擎将HTML渲染成PDF和各种图像格式。这些工具完全 "无头 "运行,不需要显示或显示服务。人能理解的解释:wkhtmltopdf 能够把多个“对象”合并生成一个pdf文档,这些“对象”可以是“页面对象”、“封面对象”、或是“目录对象”。这些对象在pdf文档中的顺序可以通过命令行参数来指定。命令行参数包括两部分,一种是针对某一特定“对象”的命令行参数,另一种是全局的命令行参数。并且全局的命令行参数只能放在全局参数区([GLOBAL OPTION])中指定。使用方案参见官方网站:wkhtmltopdf 3.1.2 优缺点 优点: 支持多种类型的系统:包括Windows、Macos、Centos、Linux、Ubuntu……; 支持“headless”,完美契合静默需求; 生成的文档体积小; …… 缺点: 由于采用Qt WebKit渲染引擎的原因,对部分Html标签和CSS的解析很不友好,导致部分网页生成PDF后会有缺失,也是最终弃用该方案的文本原因;对于特别长或者特别宽的表格支持也有问题,原因同上。 3.2 浏览器插件保存网页 3.2.1 基本思路 通过浏览器插件(Save to pages)将网页保存到本地(html文件包或者mhtml单文件)---->通过wkhtmltopdf或者其他方式将本地文件转换为PDF格式 原因:我以为方案1的问题是由于加载URL不完全造成的,所以想着将网页本地化后再转换为PDF格式,但方案一的问题仍然存在。 3.3 Chrome DevTools Protocol协议 Chrome DevTools Protocol , 又称CDP, 它可以检查/调试/监听网络流量;Chrome 浏览器的调试工具 Chrome DevTools 使用的就是这套协议, 支持 Chrome, Chromium 等所有基于 Blink 的浏览器。CDP 官方文档: https://chromedevtools.github.io/devtools-protocol/。 3.3.1 采用此方案的原因 当时在写的自动化网核项目用的是谷歌浏览器的框架,正好支持CDP. 3.3.2 具体命令 printToPDF.pdfFornext2023-3-21 23:01上传0下载3 页434.46 KB printToPDF.pdf> / 3 <<> 预览已结束,请登录阅读全文。 本文共3页,您只能预览前2页,下载后可全文阅读 点击登录 下载全文 版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领 3.3.3 具体用法(谷填表模块) 3.3.4 效果 与谷歌浏览器手动打印输出的结果一致,完美解决方案1与方案2的问题。