pdf转htmlpython将html转换为pdf的⼏种⽅法
将 HTML ⽹页转换为 PDF 是很多⼈常见的⼀个需求,在浏览器上,我们可以通过浏览器的“打印”功能直接将⽹页打印输出为PDF。
但是如果有多个⽹页就不好办了。
⽹络上存在很多将 HTML 转换为 PDF 的软件和⼯具。⽐较著名的有 Carelib、wkhtmltopdf。
whtmltopdf
wkhtmltopdf 真是⼀个优秀的 HTML 转换 PDF ⼯具。其借助 Qt 的 WebKit 渲染引擎,将 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 的⼯作。
这个模块功能很强⼤、效果很出⾊,但是,模块的依赖项太多了:
州的先⽣⾄今没有在 Windows 电脑上安装成功过!
浏览器⽅案
在上述两种⽅案中,⼆进制程序的可控制性稍有不⾜,⽽纯 Python 实现的渲染解析则在功能上和依赖上不是有友好。
处理上述两种⽅案,我们还能采⽤第三种⽅式进⾏ HTMl 到 PDF 的转换。那就是借助 Web ⾃动化测试的浏览器内核和 Qt for Python 的 Web 引擎来实现。
Web ⾃动化的浏览器内核
使⽤ Python 的⼩伙伴经常会使⽤ Selenium、pyppeteer 这两个 Web ⾃动化测试的模块来进⾏数据采集和 Web ⾃动化测试⼯作。
这两个模块都是⽤来驱动⼀个真实的浏览器来进⾏⽹页的操作。正是基于此,我们可以调⽤浏览器中打印相关的 API 接⼝,来实现 HTML 转 PDF 的功能。
例如,在 pyppeteer 中可以按照下⾯⽰例的⽅式,打开⼀个 HTML ⽂档,然后将其转换为 PDF ⽂档:
Qt 的 Web 引擎
在 Qt5 中,Qt 使⽤新的 Chromium 内核代替了⽼旧的 WebKit 作为 Web 的渲染引擎。使得在 Qt 中进⾏可以现代化的浏览器开发。
借助于 Qt 的 Python 实现(PyQt5 系列和 PySide2 系列),我们可以直接调⽤ Qt 中的 Web 引擎相关的接⼝。
其中 QtWebEngineWidgets ⼦模块中的 QWebEngineView() 类提供了 printToPdf ⽅法供我们将⽹页打印为 PDF ⽂档,所以基于此,我们也可以使⽤ PyQt5 或 PySide2 进⾏ HTML 转换 PDF,⽰例如下所⽰:
最后
在上⾯,州的先⽣介绍了 3 种在 Python 中转换 HTML ⽂档为 PDF ⽂档的⽅案,每种⽅案都有各⾃的优势和不⾜,正确地评估⾃⼰的需求然后选择合适的⽅案,也能弥补其不⾜。
以上就是python 将html转换为pdf的⼏种⽅法的详细内容,更多关于python 将html转换为pdf的资料请关注其它相关⽂章!
发布评论