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使用socket远程连接错误处理方法
Apr 29 Python
Python入门学习之字符串与比较运算符
Oct 12 Python
Python中的字符串替换操作示例
Jun 27 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
OpenCV+Python--RGB转HSI的实现
Nov 27 Python
Python 爬取必应壁纸的实例讲解
Feb 24 Python
python 子类调用父类的构造函数实例
Mar 12 Python
python 使用递归的方式实现语义图片分割功能
Jul 16 Python
用python写PDF转换器的实现
Oct 29 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 Python
Python答题卡识别并给出分数的实现代码
Jun 22 Python
python实现剪贴板的操作
Jul 01 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二分法查找数组是否包含某一元素
2013/05/23 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
JavaScript中的私有成员
2006/09/18 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
BootStrap selectpicker后台动态绑定数据的方法
2017/07/28 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
2018/01/18 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
vue 封装面包屑组件教程
2020/11/16 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
PyMongo安装使用笔记
2015/04/27 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
Python pandas自定义函数的使用方法示例
2019/11/20 Python
Python求平面内点到直线距离的实现
2020/01/19 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
2021/01/01 Python
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
美国女孩服装购物网站:Justice
2017/03/04 全球购物
巴西宠物商店:Cobasi
2019/04/19 全球购物
篝火晚会主持词
2014/03/25 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js
MySQL基于索引的压力测试的实现
2021/11/07 MySQL