wkhtmltopdf python wrapper 使用 webkit 渲染引擎和 qt 将 html 转换为 pdf
项目描述
捆绑-Python-PDFKit
这是与 wkhtmltopdf 捆绑在一起的 Python-PDFKit,因此您不必单独安装它。仅适用于 Gnu/Linux。仅在 Debian 上测试。WKHTMLtoPDF 安装在您的 virtualenv 中,因此它不会在系统范围内可用。
- 要更新 wkhtml 的版本... 在这个包中,运行
bundle.sh脚本(更改版本 首先)。
Python-PDFKit:HTML 到 PDF 包装器
wkhtmltopdf 实用程序的 Python 2 和 3 包装器,用于使用 Webkit 将 HTML 转换为 PDF。
这是ruby PDFKit库的改编版本,非常感谢他们!
安装
安装 python-pdfkit:
$ pip install bundled-pdfkit (or pip3 for python3)
安装 wkhtmltopdf(不需要这样做):
Debian/Ubuntu:
$ sudo apt-get install wkhtmltopdf
苹果系统:
$ brew install caskroom/cask/wkhtmltopdf
警告!debian/ubuntu repos 中的版本减少了功能(因为它在没有 wkhtmltopdf QT 补丁的情况下编译),例如添加大纲、页眉、页脚、TOC 等。要使用此选项,您应该从wkhtmltopdf站点安装静态二进制文件,或者您可以使用此脚本.
Windows 和其他选项:查看 wkhtmltopdf主页以获取二进制安装程序
用法
对于简单的任务:
import pdfkit
pdfkit.from_url('http://google.com', 'out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
pdfkit.from_string('Hello!', 'out.pdf')
您可以传递包含多个 URL 或文件的列表:
pdfkit.from_url(['google.com', 'yandex.ru', 'engadget.com'], 'out.pdf') pdfkit.from_file(['file1.html', 'file2.html'], 'out.pdf')
您也可以传递打开的文件:
with open('file.html') as f:
pdfkit.from_file(f, 'out.pdf')
如果您希望进一步处理生成的 PDF,可以将其读取到变量中:
# Use False instead of output path to save pdf to a variable
pdf = pdfkit.from_url('http://google.com', False)
您可以指定所有 wkhtmltopdf选项。您可以在选项名称中删除“-”。如果选项没有值,请使用None、False或''作为 dict 值:。对于可重复的选项(包括允许、cookie、自定义标题、发布、发布文件、运行脚本、替换),您可以使用列表或元组。对于需要多个值的选项(例如 –custom-header Authorization secret),我们可以使用 2 元组(参见下面的示例)。
options = {
'page-size': 'Letter',
'margin-top': '0.75in',
'margin-right': '0.75in',
'margin-bottom': '0.75in',
'margin-left': '0.75in',
'encoding': "UTF-8",
'custom-header' : [
('Accept-Encoding', 'gzip')
]
'cookie': [
('cookie-name1', 'cookie-value1'),
('cookie-name2', 'cookie-value2'),
],
'no-outline': None
}
pdfkit.from_url('http://google.com', 'out.pdf', options=options)
默认情况下,PDFKit 将显示所有wkhtmltopdf输出。如果你不想要它,你需要通过quiet选项:
options = {
'quiet': ''
}
pdfkit.from_url('google.com', 'out.pdf', options=options)
由于 wkhtmltopdf 命令语法,必须单独指定TOC和Cover选项。如果在 TOC 之前需要覆盖,请使用cover_first选项:
toc = {
'xsl-style-sheet': 'toc.xsl'
}
cover = 'cover.html'
pdfkit.from_file('file.html', options=options, toc=toc, cover=cover)
pdfkit.from_file('file.html', options=options, toc=toc, cover=cover, cover_first=True)
您可以在使用css选项转换文件或字符串时指定外部 CSS 文件。
警告这是wkhtmltopdf中此错误的解决方法。您应该先尝试--user-style-sheet选项。
# Single CSS file
css = 'example.css'
pdfkit.from_file('file.html', options=options, css=css)
# Multiple CSS files
css = ['example.css', 'example2.css']
pdfkit.from_file('file.html', options=options, css=css)
您还可以通过 HTML 中的元标记传递任何选项:
body = """
<html>
<head>
<meta name="pdfkit-page-size" content="Legal"/>
<meta name="pdfkit-orientation" content="Landscape"/>
</head>
Hello World!
</html>
"""
pdfkit.from_string(body, 'out.pdf') #with --page-size=Legal and --orientation=Landscape
配置
每个 API 调用都采用一个可选的配置参数。这应该是pdfkit.configuration() API 调用的一个实例。它将配置选项作为初始参数。可用的选项有:
wkhtmltopdf - wkhtmltopdf二进制文件的位置。默认情况下, pdfkit将尝试使用which(在 UNIX 类型系统上)或where(在 Windows 上)来定位它。
meta_tag_prefix - pdfkit特定元标记的前缀 - 默认为pdfkit-
示例 - 当wkhtmltopdf不在$PATH上时:
config = pdfkit.configuration(wkhtmltopdf='/opt/bin/wkhtmltopdf') pdfkit.from_string(html_string, output_file, configuration=config)
故障排除
IOError:“未找到 wkhtmltopdf 可执行文件”:
确保您的$PATH中有 wkhtmltopdf或通过自定义配置进行设置(请参阅上一节)。Windows中的 wkhtmltopdf或 Linux中的 wkhtmltopdf应返回二进制文件的实际路径。
IOError:“命令失败”
此错误意味着 PDFKit 无法处理输入。您可以尝试直接从错误消息中运行命令并查看导致失败的错误(在某些 wkhtmltopdf 版本上,这可能是由分段错误引起的)
变更日志
- 0.6.1
尝试解码 pdf 输出时修复 python 3+ 上的回归
- 0.6.0
支持可重复选项
支持某些选项的多个值
在需要特定参数顺序时修复一些极端情况
一些 Python 3+ 兼容性修复
更新自述文件
- 0.5.0
允许传递多个 css 文件
修复外部文件编码问题
在 *nix 系统上缺少 X 服务器时出现错误
修复最新 wkhtmltopdf 版本破坏的测试
更新自述文件
- 0.4.1
更简单的自定义配置设置
更新自述文件
- 0.4.0
允许传递类似文件的对象
能够将 PDF 作为字符串返回
允许用户指定配置
API 调用现在在成功时返回 True
bug修复
- 0.3.0
Python 3 支持
- 0.2.4
添加历史
更新 setup.py
- 0.2.3
使用 setup.py 修复安装
更新自述文件