Python合成PDF文件
最近有一个需求,就是把多个pdf按照xls文件里的规则合并成一个pdf,在网上找了下,没有发现现成的东西,只有自己动手了。
图片
简单来说就是把文件1.pdf,文件2.pdf,文件3.pdf,合并成《合并文件1》,
把文件11.pdf,文件22.pdf,文件33.pdf,合并成《合并文件2》。
理解需求了,就开始写代码了。
首先要读取xls文件就要一个库,openpyxl(pands也可以),这里以openpyxl为例。 加载要使用openpyxl中的具体库:
from openpyxl import load_workbook
加载后开始加载文件
wb = load_workbook('data/source_data.xlsx')
sheet1 = wb['source_data']
接下来就是循环xlsx文件里的内容,开始合成文件了。
for i in range(1, sheet1.max_row):
mergePdfName = sheet1.cell(row=i + 1, column=1).value
if mergePdfName is None:
print('没有填写待合成的文件名,跳过本次执行')
continue
data.append('fm_' + mergePdfName + '.pdf')
mergePdfName = mergePdfName + '.pdf'
print('开始合成' + mergePdfName)
data1.append(mergePdfName)
for j in range(1, sheet1.max_column):
fileName = sheet1.cell(row=i + 1, column=j + 1).value
if fileName is not None:
data.append(fileName)
if data:
mergepdf(data, "water_" + mergePdfName)
data = []
合成方法: 这里用的是pypdf2库
from PyPDF2 import PdfFileReader, PdfFileWriter
def mergepdf(infilelist, outfile):
pdfFileWriter = PdfFileWriter()
for inFile in infilelist:
fileName = 'data/' + inFile
if os.path.exists(fileName):
pdfReader = PdfFileReader(open(fileName, 'rb'))
numPages = pdfReader.getNumPages()
for i in range(0, numPages):
pageObj = pdfReader.getPage(i)
pdfFileWriter.addPage(pageObj)
pdfFileWriter.write(open('output/' + outfile, 'wb'))
ok,代码结束了。是不是很简单? 其实还有很多功能可以完成,比如加水印,插入pdf页面内容,文件加密等。 不懂的可以留言。或者关注v 七月之上7,后台留言哦。
|