浏览器静默打印输入PDF的几种解决方案

浏览器静默打印输入PDF的几种解决方案

1.场景与需求

  • 自动化场景:浏览器自动化填表

  • 基 本 需 求:将浏览器访问网页静默打印输出为PDF文件;

  • 应 用 场 景:如自动化网络核查、网页文章下载等!

2.存在问题

2.1直接问题

直接使用浏览器打印功能无法达到静默打印效果,会出现打印弹窗;

打印弹窗.png

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.pdf

Fornext2023-3-21 23:01上传0下载3 434.46 KB
printToPDF.pdf
>
/ 3
<
<>
预览已结束,请登录阅读全文。

本文共3页,您只能预览前2页,下载后可全文阅读



3.3.3 具体用法(谷填表模块)

1.png

3.3.4 效果

与谷歌浏览器手动打印输出的结果一致,完美解决方案1与方案2的问题。
所有评论 0
您需要登录后才可以回档 登录 | 立即注册