用PyPDF2对多个pdf文件合并

很多情况下,可能遇到下图的情况,需要合并多个pdf文件为一个。这时候就可以利用pypdf2很方便的完成。

 

代码非常的简单:

import glob
import PyPDF2

fns=glob.glob('*.pdf')
pdfWriter = PyPDF2.PdfFileWriter()

totolnum=0
for fn in fns:
    pdfFile = open(fn,'rb')
    
    pdfReader = PyPDF2.PdfFileReader(pdfFile)

    pagenum=pdfReader.numPages
    
    totolnum+=pagenum
    for i in range(pagenum):
        pg=pdfReader.getPage(i)
        
        pdfWriter.addPage(pg)
    
print('total num page is {}'.format(totolnum))    
newFile = open('mergeed.PDFa','wb')  #输出的文件路径和文件名,注意要把后缀的a去掉即可打开,或者保存路径与扫描路径不同
pdfWriter.write(newFile)

newFile.close()

 

以上的代码运行,会出错,百度后发现这个错误是由于pypdf2本身所具有的,需要进行相关文的修改,从出错提示信息里可以看到有个generic.py的文件报错,打开在488行进行修改:

 

 即

            try:
                return NameObject(name.decode('gbk'))
            except (UnicodeEncodeError, UnicodeDecodeError) as e:
                if not pdf.strict:
                    warnings.warn("Illegal character in Name Object", utils.PdfReadWarning)
                    return NameObject(name)
                else:
                    raise utils.PdfReadError("Illegal character in Name Object")

此后还需要修改utils.py的238行:

 

 即

            try:
                r = s.encode('latin-1')
            except Exception as e:
                r = s.encode('utf-8')
            if len(s) < 2:
                bc[s] = r
            return r

 

随后就可以正常运行了。

 

posted on 2021-07-31 11:40  看看完了  阅读(545)  评论(0编辑  收藏  举报

导航