使用适合heroku的wkhtmltopfd在python中生成pdf
python-pdf的Python项目详细描述
使用python生成PDF wkhtmltopdf。
wkhtmltopf二进制文件已预编译并包含在包生成中 pydf更易于使用,特别是这意味着pydf可以在heroku上工作。
目前为Ubuntu 18.04(仿生)使用wkhtmltopf0.12.5,需要Python 3.6+
如果您不在linux amd64上:pydf附带一个wkhtmltopdf二进制文件,它只在linux amd64上工作 建筑如果你在另一个操作系统或架构上,你的相似性可能会有所不同,很可能你需要提供 您自己的wkhtmltopdf二进制文件,并通过设置WKHTMLTOPDF_PATH变量将pydf指向它。
安装
pip install python-pdf
对于python 2,使用pip install python-pdf==0.30.0。
基本用法
importpydfpdf=pydf.generate_pdf('<h1>this is html</h1>')withopen('test_doc.pdf','wb')asf:f.write(pdf)
异步使用
使用wkhtmltopdf生成大量文档可能会很慢,因为wkhtmltopdf只能生成一个文档 每个进程为了解决这个问题,pydf使用python 3的asynciocreate_subprocess_exec来生成多个pdf 同时。因此,自旋过程所花费的时间不会减慢您的速度。
frompathlibimportPathfrompydfimportAsyncPydfasyncdefgenerate_async():apydf=AsyncPydf()asyncdefgen(i):pdf_content=awaitapydf.generate_pdf('<h1>this is html</h1>')Path(f'output_{i:03}.pdf').write_bytes(pdf_content)coros=[gen(i)foriinrange(50)]awaitasyncio.gather(*coros)loop=asyncio.get_event_loop()loop.run_until_complete(generate_async())
见benchmarks/run.py 举个完整的例子
使用异步模型,在本地生成整个发票从0.372s/pdf到0.035s/pdf。
码头工人
pydf可用作docker映像,它有一个非常简单的用于生成pdf的http API
简单的POST(或者GET如果可能的话,使用数据)HTML数据到/generate.pdf
参数可以使用http头传递;任何以pdf-或pdf_开头的头都将 删除该前缀,转换为小写并传递给wkhtmltopf
例如:
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合成中:
services:pdf:image:samuelcolvin/pydf
然后,其他服务可以通过向pdf/generate.pdf发出请求来生成pdf很酷。
API
generate_pdf(源,[**kwargs])
从url或html字符串生成pdf。
在html和url参数之后,所有其他参数都直接传递 到WKHTMLTOPDF
有关额外参数的详细信息,请参见get_help()和 获取扩展帮助()
所有参数无论是指定的还是用额外的夸克捕获的都是 已用'--' + original_name.replace('_','-')转换为命令行参数
如果参数是真的,则传递的参数没有值,例如just–quiet, 错误且没有遗漏任何参数,所有其他参数都被传递 str(值)
参数:
- source:要从中生成pdf的html字符串或要获取的url
- quiet:布尔
- grayscale:bool
- lowquality:bool
- margin_bottom:字符串,例如10毫米
- margin_left:字符串,例如10毫米
- margin_right:字符串,例如10毫米
- margin_top:字符串,例如10毫米
- orientation:纵向或横向
- page_height:字符串,例如10毫米
- page_width:字符串,例如10毫米
- page_size:字符串:A4,字母等
- image_dpi:int默认值600
- image_quality:int默认值94
- extra_kwargs:wkhtmltopfd的任何特殊附加选项
返回表示pdf的字符串
get_version()
获取PYDF和WKHTMLTOPDF二进制文件的版本
get_help()
从wkhtmltopfd binary uses-h命令行选项获取帮助字符串
get_extended_help()
从wkhtmltopfd binary uses-h命令行获取扩展帮助字符串 选择权
执行wk(*args)
调用wkhtmltopfd的低级函数,参数被添加到 wkhtmltopdf二进制文件并传递给子进程而不进行处理