大家好,欢迎来到IT知识分享网。
Py之pdfkit:pdfkit的简介、安装和使用方法、案例应用之详细攻略
目录
pdfkit的简介
pdfkit是Python 2 和 3 的封装器,用于使用 Webkit 将 HTML 转换为 PDF 的 wkhtmltopdf 实用工具。pdfkit是 Ruby PDFKit 库的改编版本。
pdfkit的安装和使用方法
pip install pdfkit pip install -i https://mirrors.aliyun.com/pypi/simple pdfkit
pdfkit的案例应用
1、基础任务
# 对于简单的任务:import pdfkitpdfkit.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,可以将其读取到一个变量中:# 没有output_path,PDF将被返回以便分配给一个变量pdf = pdfkit.from_url('http://google.com')
2、指定所有wkhtmltopdf选项
可以指定所有wkhtmltopdf选项。您可以在选项名称中省略“ – ”。如果选项没有值,请使用None、False或‘’作为字典值。对于可重复的选项(包括allow、cookie、custom-header、post、postfile、run-script、replace等),您可以使用列表或元组。对于需要多个值的选项(例如 -custom-header Authorization secret),我们可以使用一个2元组(见下面的示例)。
# 可以指定所有wkhtmltopdf选项。您可以在选项名称中省略“ - ”。如果选项没有值,请使用None、False或‘’作为字典值。对于可重复的选项(包括allow、cookie、custom-header、post、postfile、run-script、replace等),您可以使用列表或元组。对于需要多个值的选项(例如 -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-empty-value', '""'),
('cookie-name1', 'cookie-value1'),
('cookie-name2', 'cookie-value2'),
],
'no-outline': None
}
pdfkit.from_url('http://google.com', 'out.pdf', options=options)
# 默认情况下,PDFKit将使用安静选项运行wkhtmltopdf,因为在大多数情况下不需要输出,并且可能会导致过多的内存使用和损坏的结果。 如果需要获取wkhtmltopdf输出,您应该在API调用中传递verbose=True:
pdfkit.from_url('google.com', 'out.pdf', verbose=True)
# 由于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)
3、在转换文件或字符串时
# 在转换文件或字符串时,您可以通过css选项指定外部CSS文件。
# 警告:这是对wkhtmltopdf中此bug的一个解决方法。您应该首先尝试--user-style-sheet选项。
# 单个CSS文件
css = 'example.css'
pdfkit.from_file('file.html', options=options, css=css)
# 多个CSS文件
css = ['example.css', 'example2.css']
pdfkit.from_file('file.html', options=options, css=css)
# 可以通过HTML中的meta标签传递任何选项:
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特定meta标签的前缀 - 默认情况下是pdfkit-
示例 - 当wkhtmltopdf不在$PATH中时:
'''
config = pdfkit.configuration(wkhtmltopdf='/opt/bin/wkhtmltopdf')
pdfkit.from_string(html_string, output_file, configuration=config)
# 可以使用configuration()调用来检查wkhtmltopdf是否存在于$PATH中:
try:
config = pdfkit.configuration()
pdfkit.from_string(html_string, output_file)
except OSError:
#不在PATH中
# 故障排除
'''
调试PDF生成问题
如果您在生成正确的PDF方面遇到困难,首先应检查wkhtmltopdf输出以获取一些线索,您可以通过将verbose=True传递给API调用来获得它:
'''
pdfkit.from_url('http://google.com', 'out.pdf', verbose=True)
# 在PDF中获得奇怪的结果或某个选项似乎被忽略,您应该尝试直接运行wkhtmltopdf,看看是否产生相同的结果。您可以通过直接创建pdfkit.PDFKit类,然后调用其command()方法来获得CLI命令:
import pdfkit
r = pdfkit.PDFKit('html', 'string', verbose=True)
print(' '.join(r.command()))
# 尝试运行wkhtmltopdf来创建PDF
output = r.to_pdf()
# 常见错误:
IOError:'找不到wkhtmltopdf可执行文件':
确保您的$PATH中有wkhtmltopdf,或者通过自定义配置(参见前面的部分)设置。在Windows中,where wkhtmltopdf或在Linux中which wkhtmltopdf应该返回二进制文件的实际路径。
IOError:"命令失败"
这个错误意味着PDFKit无法处理输入。您可以尝试直接从错误消息中运行一个命令,并查看是什么错误导致了失败(在某些wkhtmltopdf版本中,这可能是由分段错误引起的)
4、配置
# 在转换文件或字符串时,您可以通过css选项指定外部CSS文件。
# 警告:这是对wkhtmltopdf中此bug的一个解决方法。您应该首先尝试--user-style-sheet选项。
# 单个CSS文件
css = 'example.css'
pdfkit.from_file('file.html', options=options, css=css)
# 多个CSS文件
css = ['example.css', 'example2.css']
pdfkit.from_file('file.html', options=options, css=css)
# 可以通过HTML中的meta标签传递任何选项:
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特定meta标签的前缀 - 默认情况下是pdfkit-
示例 - 当wkhtmltopdf不在$PATH中时:
'''
config = pdfkit.configuration(wkhtmltopdf='/opt/bin/wkhtmltopdf')
pdfkit.from_string(html_string, output_file, configuration=config)
# 可以使用configuration()调用来检查wkhtmltopdf是否存在于$PATH中:
try:
config = pdfkit.configuration()
pdfkit.from_string(html_string, output_file)
except OSError:
#不在PATH中
5、调试PDF生成问题
# 故障排除
'''
调试PDF生成问题
如果您在生成正确的PDF方面遇到困难,首先应检查wkhtmltopdf输出以获取一些线索,您可以通过将verbose=True传递给API调用来获得它:
'''
pdfkit.from_url('http://google.com', 'out.pdf', verbose=True)
# 在PDF中获得奇怪的结果或某个选项似乎被忽略,您应该尝试直接运行wkhtmltopdf,看看是否产生相同的结果。您可以通过直接创建pdfkit.PDFKit类,然后调用其command()方法来获得CLI命令:
import pdfkit
r = pdfkit.PDFKit('html', 'string', verbose=True)
print(' '.join(r.command()))
# 尝试运行wkhtmltopdf来创建PDF
output = r.to_pdf()
6、常见错误
# 常见错误:
IOError:'找不到wkhtmltopdf可执行文件':
确保您的$PATH中有wkhtmltopdf,或者通过自定义配置(参见前面的部分)设置。在Windows中,where wkhtmltopdf或在Linux中which wkhtmltopdf应该返回二进制文件的实际路径。
IOError:"命令失败"
这个错误意味着PDFKit无法处理输入。您可以尝试直接从错误消息中运行一个命令,并查看是什么错误导致了失败(在某些wkhtmltopdf版本中,这可能是由分段错误引起的)
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/134343.html