python PDF合并后大小不一致解决
使用的库是PyPDF2,python3.6
出现此问题的原因:最近在做一个工具有a.pdf和b.pdf两个文件,需要把b.pdf的第三页换成到a.pdf的倒数第五页中,主要的问题是:两个PDF的大小,因为有一个是扫描的,所以不一致,解决代码如下:
# 打开PDF,创建File对象,还有创建PdfFileReader对象,从打开的PDF中读取数据
mbpdf = open(zddmFilepath, 'rb')
processpdf = open(processPDF, 'rb')
mbpdfReader = PdfFileReader(mbpdf)
if mbpdfReader.numPages!=4:
err="[%s]的成果签字确认资料页数为[%d]页,应该为4页" %(zddmname,mbpdfReader.numPages)
return
processpdfReader = PdfFileReader(processpdf)
# PdfFileWriter对象,表示一个空白的PDF文档,可以往里面写数据 把processpdf的倒数第五页替换为mbpdf的第三页
pdfWriter = PdfFileWriter()
layout=pdfWriter.getPageLayout()
for pageNum in range(processpdfReader.numPages):
if pageNum == processpdfReader.numPages - 5:
#获取页面大小
indexPage=processpdfReader.getPage(pageNum)
sze=getPageSize(indexPage)
mbpdfReader.getPage(2).scaleTo(595.3,841.9)
pdfWriter.addPage(mbpdfReader.getPage(2))
else:
pageObj = processpdfReader.getPage(pageNum)
pdfWriter.addPage(pageObj)
# 通过open()新建一个PDF文档,然后把pdfWriter的内容写入到pdfOutputFile中。
pdfOutputFile = open(os.path.join(savepath, "调查表.pdf"), 'wb')
pdfWriter.write(pdfOutputFile)
pdfOutputFile.close()
mbpdf.close()
processpdf.close()
#删除过程文件
deleteProcess(processPDF)
#解决页面大小的关键方法:
mbpdfReader.getPage(2).scaleTo(595.3,841.9)
获取页面大小的方法:
PyPDF2的获取方法
def getPageSize(page_1):
if page_1.get('/Rotate', 0) in [90, 270]:
return page_1['/MediaBox'][3],page_1['/MediaBox'][2]
else:
return page_1['/MediaBox'][2],page_1['/MediaBox'][3]
参考来源:
python操作PDF的详细介绍