使用wkhtmltopdf在python中生成PDF,适用于heroku
项目描述
使用wkhtmltopdf在python中生成PDF。
Wkhtmltopdf二进制文件已预编译并包含在包中,使pydf更容易使用,特别是这意味着pydf可以在heroku上工作。
目前使用 wkhtmltopdf 0.12.6.1 r3 for Ubuntu 22.04 (jammy),需要 Python 3.6+。
如果您不在Linux amd64上: pydf附带了一个wkhtmltopdf二进制文件,它仅适用于Linux amd64架构。如果您使用的是其他操作系统或架构,您的使用效果可能会有所不同,您可能需要提供自己的wkhtmltopdf二进制文件,并通过设置WKHTMLTOPDF_PATH环境变量将pydf指向它。
安装
pip install python-pdf
基本用法
import pydf
pdf = pydf.generate_pdf('<h1>this is html</h1>')
with open('test_doc.pdf', 'wb') as f:
f.write(pdf)
异步用法
由于wkhtmltopdf每次只能生成一个文档,因此使用wkhtmltopdf生成大量文档可能会很慢。为了解决这个问题,pydf使用python 3的asyncio create_subprocess_exec来同时生成多个PDF。因此,启动进程所花费的时间不会减慢您。
from pathlib import Path
from pydf import AsyncPydf
async def generate_async():
apydf = AsyncPydf()
async def gen(i):
pdf_content = await apydf.generate_pdf('<h1>this is html</h1>')
Path(f'output_{i:03}.pdf').write_bytes(pdf_content)
coros = [gen(i) for i in range(50)]
await asyncio.gather(*coros)
loop = asyncio.get_event_loop()
loop.run_until_complete(generate_async())
请参阅benchmarks/run.py以获取完整示例。
使用异步模型,生成整个发票的时间从0.372s/pdf减少到0.035s/pdf。
Docker
pydf可作为带有用于生成PDF的非常简单的http API的docker镜像提供。
简单的POST(如果可能,请使用带有数据的GET)将HTML数据发送到/generate.pdf。
可以使用HTTP头传递参数;以pdf-或pdf_开头的任何头都会去掉该前缀,转换为小写,并传递给wkhtmltopdf。
例如
docker run -rm -p 8000:80 -d samuelcolvin/pydf
curl -d '<h1>this is html</h1>' -H "pdf-orientation: landscape" http://localhost:8000/generate.pdf > created.pdf
open "created.pdf"
在docker compose中
services:
pdf:
image: samuelcolvin/pydf
其他服务可以通过向pdf/generate.pdf发起请求来生成PDF。非常酷。
API
generate_pdf(source, [**kwargs])
从URL或HTML字符串生成PDF。
在html和url参数之后,所有其他参数都直接传递给wkhtmltopdf
有关额外参数的详细信息,请参阅get_help()和get_extended_help()的输出
所有参数(无论指定与否或通过extra_kwargs捕获)都转换为命令行参数,格式为'--' + original_name.replace('_', '-')。
布尔值参数不带值传递,例如仅传递–quiet,False和None参数被忽略,其他所有参数都使用str(value)传递。
参数
source:生成PDF的HTML字符串或获取URL
quiet:布尔值
grayscale:布尔值
lowquality:布尔值
margin_bottom:字符串,例如10mm
margin_left:字符串,例如10mm
margin_right:字符串,例如10mm
margin_top:字符串,例如10mm
orientation:肖像或横幅
page_height:字符串,例如10mm
page_width:字符串,例如10mm
page_size:字符串:A4、Letter等。
image_dpi:默认600的整数
image_quality:默认94的整数
extra_kwargs:wkhtmltopdf的任何异类额外选项
返回表示PDF的字符串
get_version()
获取pydf和wkhtmltopdf二进制文件的版本
get_help()
从wkhtmltopdf二进制文件获取帮助字符串,使用命令行选项-h
get_extended_help()
从wkhtmltopdf二进制文件获取扩展帮助字符串,使用命令行选项-H
execute_wk(*args)
低级函数用于调用wkhtmltopdf,参数添加到wkhtmltopdf二进制文件中,并通过子进程传递,不进行处理。
Heroku
如果您正在部署到Heroku,则在WKHTMLTOPDF工作之前,您需要安装一些依赖项。
添加Heroku构建补丁包 https://buildpack-registry.s3.amazonaws.com/buildpacks/heroku-community/apt.tgz
然后在根目录中创建一个包含依赖项的Aptfile
项目详情
下载文件
下载适合您的平台的文件。如果您不确定选择哪个,请了解安装包的更多信息。
源代码分发
构建分发
python-pdf-0.40.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | aaceddc7ef13e1db69b88a231db77a41068a618e9220088e730ce8c99eee30a5 |
|
MD5 | b593073ed4764aece2497af6f82d526f |
|
BLAKE2b-256 | fadaadd32ad09d608f43e805089d5af874eb2f3a74d52426d4dbc2aba4243c9a |
python_pdf-0.40-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5bfb72205f3be8e6529350b63a429902e4172bcd143c93e560eeae730f1ee0f4 |
|
MD5 | 1d281f25c514923746d4960bb294c26a |
|
BLAKE2b-256 | 14a90d4f3c58ff8b5477378e723aa8b53ae6a28ff9b69fd305cc2876a0ca3e19 |