pdfkit模块
python中将html转化为pdf的常用工具是Wkhtmltopdf工具包,在python环境下,pdfkit是这个工具包的封装类。如何使用pdfkit以及如何配置呢?分如下几个步骤。
1,下载wkhtmltopdf安装包,并且安装到电脑上,在系统Path变量中添加wkhtmltopdf的bin路径,以便于pdfkit的调用。
下载地址:https://wkhtmltopdf.org/downloads.html
2,在pycharm中安装pdfkit库
pip install pdfkit
3,在pycharm中安装whtmltopdf库
这个和第一步中的安装包是两个东西,请区别开来
pip install wkhtmltopdf
用法
简单用法
import pdfkit
pdfkit.from_url("https://www.baidu.com/", "out1.pdf")
pdfkit.from_file('test.html','out2.pdf')
pdfkit.from_string('Hello!','out3.pdf')
添加配置
#添加配置
options = {
'page-size': 'Letter',
'margin-top': '0.75in',
'margin-right': '0.75in',
'margin-bottom': '0.75in',
'margin-left': '0.75in',
# 'encoding': "UTF-8",
# 'custom-header' : [
# ('Accept-Encoding', 'gzip')
# ],
'cookie': [
('cookie-name1', 'cookie-value1'),
('cookie-name2', 'cookie-value2'),
],
'no-outline': None
}
pdfkit.from_url('http://www.apelearn.com/study_v2/', 'out7.pdf',options=options)
我们还可以传入任何html标签:
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
例子:将http://www.apelearn.com/study_v2/ 的跟啊铭学linux的电子书生成pdf保存到本地
import codecs
import os
import sys
import pdfkit
import requests
base_url = 'http://www.apelearn.com/study_v2/'
if not os.path.exists("aming"):
os.mkdir("aming")
os.chdir("aming")
s = requests.session()
for i in range(1,27):
url = base_url+'chapter'+str(i)+'.html'
print(url)
file=str(i) + '.pdf'
print(file)
config = pdfkit.configuration(wkhtmltopdf=r"E:\wkhtmltopdf\bin\wkhtmltopdf.exe")
try:
pdfkit.from_url(url,file)
except:
continue
用PyPDF2 合并所有的pdf
# 合并所有的pdf到一个pdf下
import codecs
import PyPDF2
import os
files = list()
for fileName in os.listdir("aming"):
if fileName.endswith(".pdf"):
files.append(fileName)
newFiles = sorted(files, key=lambda d: int(d.split(".pdf")[0])) #排序 按数字大小
print(newFiles)
os.chdir("aming")
pdfWriter = PyPDF2.PdfFileWriter()#生成一个空白的pdf
for item in newFiles:
pdfReader = PyPDF2.PdfFileReader(open(item, "rb")) #读取pdf文件
for page in range(pdfReader.numPages):
pdfWriter.addPage(pdfReader.getPage(page)) #获取所有的总页数
with codecs.open("aminglinux.pdf", "wb") as f: #写入文件
pdfWriter.write(f)
网友评论