python 将html转换为pdf的几种方法


Posted in Python onDecember 29, 2020

将 HTML 网页转换为 PDF 是很多人常见的一个需求,在浏览器上,我们可以通过浏览器的“打印”功能直接将网页打印输出为 PDF。

但是如果有多个网页就不好办了。

二进制软件

网络上存在很多将 HTML 转换为 PDF 的软件和工具。比较著名的有 Carelib、wkhtmltopdf。

whtmltopdf

wkhtmltopdf 真是一个优秀的 HTML 转换 PDF 工具。其借助 Qt 的 WebKit 渲染引擎,将 HTML 文档渲染导出为 PDF 文档或图像。

python 将html转换为pdf的几种方法

功能十分完善,但是由于使用的渲染引擎是 Qt 的 WebKit,其没法对 ES6 的 JavaScript 代码提供支持,导致一些采用 ES6 编写的 HTML 页面渲染不出实际的效果来,导致州的先生最终放弃了它。

Carelib

Carelib 是一个电子书管理软件,其中提供了各类文档的转换工具,所以可以借助其电子书转换工具来实现 HTMl 到 PDF 的转换。

这些都是用于桌面环境的二进制软件,如果要在 Python 中使用,要么使用 Popen() 方法调用这些二进制软件的命令,要么使用一些第三方的封装模块,比如:pdfkit、pypandoc 等,这些第三方模块通过集成调用上述二进制软件,封装了一些方便 Python 调用的接口。

纯 Python 库实现

上面介绍的那些 Python 第三方模块虽然可以很好的进行 HTML 到 PDF 的转换工作,但是都需要额外在计算机上安装其他的二进制软件,很多小伙伴并不喜欢这种调用方式。

不依赖于二进制软件的实现,有如下的方案:

xhtml2pdf

这是一个基于 ReportLab、html5lib、PyPDF2 等 Python 模块构建的 HTML 到 PDF 转换模块。能够很好的支持 HTML5 、CSS2.1 和部分 CSS3 语法。

因为是基于 Report Lab 模块进行的开发,其对中文的支持在某些环境下会有问题。而且由于开发人员的变更,模块的功能出现了一些断层。但是仍然是一个非常棒的 HTML 转 PDF 模块。

weasyprint

这是一个用于 HTML 和 CSS 的可视化渲染引擎,可以将 HTML 文档导出为打印标准的 PDF 文件。

xhtml2pdf 模块也曾推荐使用这个模块来进行 HTML 转换 PDF 的工作。

这个模块功能很强大、效果很出色,但是,模块的依赖项太多了:

python 将html转换为pdf的几种方法

州的先生至今没有在 Windows 电脑上安装成功过!

浏览器方案

在上述两种方案中,二进制程序的可控制性稍有不足,而纯 Python 实现的渲染解析则在功能上和依赖上不是有友好。

处理上述两种方案,我们还能采用第三种方式进行 HTMl 到 PDF 的转换。那就是借助 Web 自动化测试的浏览器内核和 Qt for Python 的 Web 引擎 来实现。

Web 自动化的浏览器内核

使用 Python 的小伙伴经常会使用 Selenium、pyppeteer 这两个 Web 自动化测试的模块来进行数据采集和 Web 自动化测试工作。

这两个模块都是用来驱动一个真实的浏览器来进行网页的操作。正是基于此,我们可以调用浏览器中打印相关的 API 接口,来实现 HTML 转 PDF 的功能。

例如,在 pyppeteer 中可以按照下面示例的方式,打开一个 HTML 文档,然后将其转换为 PDF 文档:

python 将html转换为pdf的几种方法

Qt 的 Web 引擎

在 Qt5 中,Qt 使用新的 Chromium 内核代替了老旧的 WebKit 作为 Web 的渲染引擎。使得在 Qt 中进行可以现代化的浏览器开发。

借助于 Qt 的 Python 实现(PyQt5 系列 和 PySide2 系列),我们可以直接调用 Qt 中的 Web 引擎相关的接口。

其中 QtWebEngineWidgets 子模块中的 QWebEngineView() 类提供了 printToPdf 方法供我们将网页打印为 PDF 文档,所以基于此,我们也可以使用 PyQt5 或 PySide2 进行 HTML 转换 PDF,示例如下所示:

python 将html转换为pdf的几种方法

最后

在上面,州的先生介绍了 3 种在 Python 中转换 HTML 文档为 PDF 文档的方案,每种方案都有各自的优势和不足,正确地评估自己的需求然后选择合适的方案,也能弥补其不足。

以上就是python 将html转换为pdf的几种方法的详细内容,更多关于python 将html转换为pdf的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python利用多进程将大量数据放入有限内存的教程
Apr 01 Python
Python多进程并发(multiprocessing)用法实例详解
Jun 02 Python
Python WXPY实现微信监控报警功能的代码
Oct 20 Python
Linux CentOS Python开发环境搭建教程
Nov 28 Python
解决Python pandas plot输出图形中显示中文乱码问题
Dec 12 Python
使用python 打开文件并做匹配处理的实例
Jan 02 Python
从0开始的Python学习014面向对象编程(推荐)
Apr 02 Python
基于python3抓取pinpoint应用信息入库
Jan 08 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
python 中不同包 类 方法 之间的调用详解
Mar 09 Python
numpy的Fancy Indexing和array比较详解
Jun 11 Python
python切割图片的示例
Nov 12 Python
python实现ping命令小程序
Dec 28 #Python
如何用python 操作zookeeper
Dec 28 #Python
Pycharm在指定目录下生成文件和删除文件的实现
Dec 28 #Python
Python用Jira库来操作Jira
Dec 28 #Python
python性能测试工具locust的使用
Dec 28 #Python
Python+kivy BoxLayout布局示例代码详解
Dec 28 #Python
python字典与json转换的方法总结
Dec 28 #Python
You might like
php中实现xml与mysql数据相互转换的方法
2014/12/25 PHP
基于PHP制作验证码
2016/10/12 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
Prototype使用指南之array.js
2007/01/10 Javascript
图片连续滚动代码[兼容IE/firefox]
2009/06/11 Javascript
javascript 新浪背投广告实现代码
2009/07/07 Javascript
不同浏览器的怪癖小结
2010/07/11 Javascript
当前流行的JavaScript代码风格指南
2014/09/10 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
Jquery调用iframe父页面中的元素及方法
2016/08/23 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
el-select数据过多懒加载的解决(loadmore)
2019/05/29 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
Python中asyncore的用法实例
2014/09/29 Python
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
do you have any Best Practice for testing
2016/06/04 面试题
企业法人授权委托书
2014/04/03 职场文书
教师评语大全
2014/04/28 职场文书
团队队名口号大全
2014/06/06 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
解除合同协议书范本
2016/03/21 职场文书
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python
python运行脚本文件的三种方法实例
2022/06/25 Python