python生成pdf报告、python实现html转换为pdf报告
程序员文章站
2022-12-28 16:11:21
1、先说下html转换为pdf:其实支持直接生成,有三个函数pdfkit.f 安装python包:pip Install pdfkit 系统安装wkhtmltopdf:参考 https://github.com/JazzCore/python-pdfkit/wiki/Installing-wkhtm ......
1、先说下html转换为pdf:其实支持直接生成,有三个函数pdfkit.f
安装python包:pip install pdfkit
系统安装wkhtmltopdf:参考 https://github.com/jazzcore/python-pdfkit/wiki/installing-wkhtmltopdf
mac下的wkhtmltopdf: brew install caskroom/cask/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')
传递一个打开的文件:
withopen('file.html')asf: pdfkit.from_file(f,'out.pdf')
如果你想对生成的pdf作进一步处理, 你可以将其读取到一个变量中: # 设置输出文件为false,将结果赋给一个变量pdf=pdfkit.from_url('http://google.com',false)
你可以制定所有的 wkhtmltopdf选项 . 你可以移除选项名字前面的 '--' .如果选项没有值, 使用none, falseor*作为字典值:
options={ 'page-size':'letter', 'margin-top':'0.75in', 'margin-right':'0.75in', 'margin-bottom':'0.75in', 'margin-left':'0.75in', 'encoding':"utf-8", 'no-outline':none } pdfkit.from_url('http://google.com','out.pdf', options=options)
当你转换文件、或字符串的时候,你可以通过css选项指定扩展的 css 文件。 # 单个 css 文件 css='example.css'pdfkit.from_file('file.html', options=options, css=css) # multiple css filescss=['example.css','example2.css'] pdfkit.from_file('file.html', options=options, css=css) 你也可以通过你的html中的meta tags传递任意选项: 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
2、再说reporatlab
安装:pip install reportlab
简单使用:
#!/usr/bin/python from reportlab.pdfgen import canvas def hello(): c = canvas.canvas("helloworld.pdf") c.drawstring(100,100,"hello,world") c.showpage() c.save() hello()
#!/usr/bin/env python import subprocess import datetime from reportlab.pdfgen import canvas from reportlab.lib.units import inch def disk_report(): p = subprocess.popen("df -h", shell=true, stdout=subprocess.pipe) # print p.stdout.readlines() return p.stdout.readlines() def create_pdf(input, output="disk_report.pdf"): now = datetime.datetime.today() date = now.strftime("%h %d %y %h:%m:%s") c = canvas.canvas(output) textobject = c.begintext() textobject.settextorigin(inch, 11*inch) textobject.textlines('''disk capcity report: %s''' %date) for line in input: textobject.textline(line.strip()) c.drawtext(textobject) c.showpage() c.save() report = disk_report() create_pdf(report)
上一篇: php生成随机密码的三种方法小结
下一篇: 小文件php+SQLite存储方案