本文实例讲述了python实现html转换为pdf报告(生成pdf报告)功能。分享给大家供大家参考,具体如下:
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
1
2
3
4
|
import pdfkit
pdfkit.from_url( 'http://google.com' , 'out.pdf' )
pdfkit.from_file( 'test.html' , 'out.pdf' )
pdfkit.from_string( 'hello!' , 'out.pdf' )
|
传递一个url或者文件名列表:
1
2
|
pdfkit.from_url([ 'google.com' , 'yandex.ru' , 'engadget.com' ], 'out.pdf' )
pdfkit.from_file([ 'file1.html' , 'file2.html' ], 'out.pdf' )
|
传递一个打开的文件:
1
2
|
withopen( 'file.html' )asf:
pdfkit.from_file(f, 'out.pdf' )
|
如果你想对生成的pdf作进一步处理, 你可以将其读取到一个变量中:
# 设置输出文件为false,将结果赋给一个变量
1
|
pdf = pdfkit.from_url( 'http://google.com' ,false)
|
你可以制定所有的 wkhtmltopdf选项 . 你可以移除选项名字前面的 '--' .如果选项没有值, 使用none, falseor*作为字典值:
1
2
3
4
5
6
7
8
9
10
|
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 文件。
1
2
3
4
|
# 单个 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传递任意选项:
1
2
|
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
安装:
1
|
pip install reportlab
|
简单使用:
1
2
3
4
5
6
7
8
|
#!/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()
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#!/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)
|
参考:
1、https://github.com/twtrubiks/python-pdfkit-example
2、//www.zzvips.com/article/160638.htm
3、https://bitbucket.org/rptlab/reportlab
4、http://www.reportlab.com/opensource/
5、http://www.reportlab.com/docs/reportlab-userguide.pdf
6、http://www.zzvips.com/article/172648.html
希望本文所述对大家python程序设计有所帮助。
原文链接:https://www.cnblogs.com/shengulong/p/7994082.html