主要使用的是wkhtmltopdf的Python封裝——pdfkit
centos環(huán)境
安裝:Install python-pdfkit
pip install pdfkit
安裝:Install wkhtmltopdf
yum intsall wkhtmltopdf
windows環(huán)境下安裝wkhtmltopdf參考這篇文章:
http://blog.csdn.net/qq_14873105/article/details/51394026
Linux環(huán)境下安裝wkhtmltopdf參考這篇文章:
http://blog.csdn.net/mr_zing/article/details/52833461
使用:
一個(gè)簡(jiǎn)單的梨子:
import pdfkit
pdfkit.from_string('hello,python','out.pdf')
pdfkit.from_url('http://baidu.com','out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
我們也可以傳遞一個(gè)url或者文件名列表:
pdfkit.from_url(['google.com', 'yandex.ru', 'engadget.com'], 'out.pdf') pdfkit.from_file(['file1.html', 'file2.html'], 'out.pdf')
也可以傳遞一個(gè)打開(kāi)的文件:
with open('file.html') as f:
pdfkit.from_file(f,'out.pdf')
如果想對(duì)生成的PDF作進(jìn)一步處理辛藻,我們可以將其讀取到一個(gè)變量中:
#設(shè)置輸出文件為False轩触,將結(jié)果賦給一個(gè)變量
pdf = pdfkit.form_url('http://google.com', False)
我們可以制定所有的 wkhtmltopdf 選項(xiàng) http://wkhtmltopdf.org/usage/wkhtmltopdf.txt. 我們可以移除選項(xiàng)名字前面的 '--' .如果選項(xiàng)沒(méi)有值, 使用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)
默認(rèn)情況下, PDFKit 將會(huì)顯示所有的 wkhtmltopdf 輸出. 如果不想看到這些信息瓢剿,你需要傳遞一個(gè) quiet 選項(xiàng):
options = {
'quiet': ''
}
pdfkit.from_url('google.com', 'out.pdf', options=options)
由于wkhtmltopdf的命令語(yǔ)法 , TOC 和 Cover 選項(xiàng)必須分開(kāi)指定:
toc = {
'xsl-style-sheet': 'toc.xsl'
}
cover = 'cover.html'
pdfkit.from_file('file.html', options=options, toc=toc, cover=cover)
當(dāng)我們轉(zhuǎn)換文件书蚪、或字符串的時(shí)候狰闪,可以通過(guò)css選項(xiàng)指定擴(kuò)展的 CSS 文件疹吃。
# 單個(gè) CSS 文件
css = 'example.css'
pdfkit.from_file('file.html', options=options, css=css)
# Multiple CSS files
css = ['example.css', 'example2.css']
pdfkit.from_file('file.html', options=options, css=css)
也可以通過(guò)HTML中的meta tags傳遞任意選項(xiàng):
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