使用适合heroku的wkhtmltopfd在python中生成pdf

python-pdf的Python项目详细描述


BuildStatuscodecovPyPIlicensedocker

使用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二进制文件并传递给子进程而不进行处理

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在一个问题被连续正确回答三次/并添加差异后,我如何将程序循环回开始   Java中未实例化的匿名类   java如何在Android中录制视频,只允许横向模式和最长时间录制时间   java从另一个活动发送实时消息   多线程java线程和互斥   java禁用Spring安全日志   JAVA伊奥。StreamCorruptedException:在与子级和父级ProcessBuilder通信时写入子级中的标准输出时,流头无效   使用Java(HttpURLConnection)对Restheart进行身份验证(对于Mongodb)   java如何解决Jenkins中的SAXParseException?   java为什么我需要mockito来测试Spring应用程序?   计算sin-cos和tan时缺乏精度(java)   java Hibernate。不同项目中相同一对一映射的不同行为   java图像滑块:如何使用JavaFX将图像放在另一个图像上   java Mockito在使用when时抛出NotAMockException   http Java servlet发送回响应