今天的具体内容将从以下几个小节展开:相关介绍批量拆分批量合并提取文本内容提升表格内容提升图片内容转换为PDF图片添加水印加密解码上面的操作是比较常用,也可以解决更多的办公内容。本节直接开始:1.相关介绍Python中操作PDF使用了两个库,分别是:PyPDF2和pdfplumber。其中PyPDF2可以更好的读取、写入、拆分、合并PDF文件,而pdfplumber可以更好的读取PDF文件的内容,提取PDF中的表格。对应的官网是:PyPDF2:https://pythonhosted.org/PyPDF2/pdfplumber:https://github.com/jsvine/pdfplumber由于这两个库不是Python标准库,所以需要单独安装。win+r后输入cmd打开命令窗口,依次输入以下命令进行安装:pipinstallPyPDF2pipinstallpdfplumber如果安装完成后显示success则表示安装成功。2.批量拆分将一个完整的PDF拆分成若干个小的PDF,因为主要涉及PDF的整体操作,所以这部分需要用到库PyPDF2。拆分的大致思路是:读取PDF的整体信息,总页数等,遍历每一页,每步间隔将PDF保存为每个小文件块,保存小文件块作为一个新的需要注意的是,对于PDF文件,在拆分过程中,可以手动设置间隔,例如:每5页另存为一个小PDF文件。拆分代码如下:importosfromPyPDF2importPdfFileWriter,PdfFileReaderdefsplit_pdf(filename,filepath,save_dirpath,step=5):"""将PDF拆分成多个小PDF文件,@paramfilename:filename@paramfilepath:文件路径@paramsave_dirpath:保存小PDF的文件路径@paramstep:每step间隔页生成一个文件,例如step=5,表示0-4页,5-9页...作为一个文件@return:"""ifnotos.path.exists(save_dirpath):os.mkdir(save_dirpath)pdf_reader=PdfFileReader(filepath)#读取每一页的数据pages=pdf_reader.getNumPages()forpageinrange(0,pages,step):pdf_writer=PdfFileWriter()#splitpdf,spliteachsteppageintoanfileforindexinrange(page,page+step):ifindex=5:#首先转换CMYKpix=fitz.Pixmap(fitz.csRGB,pix)#另存为PNGpix.writePNG(pic_filepath)#提取图片内容extract_pic_info(filepath,pic_dirpath)图片取自《易方达中小盘混合证券投资2020年半年度报告F》und”作为本节中的示例。代码运行后提取的图片如下:这个结果和文档中一共1张图片的结果相匹配。7、转图片转照片比较简单,就是将PDF一页一页的转成图片。大体流程如下:要安装pdf2image,首先需要安装相应的库。最新的pdf2image库版本应该是1.14.0。它的github地址是:https://github.com/Belval/pdf2image,有兴趣的可以自行学习。安装方法如下:pipinstallpdf2image安装组件对于不同的平台,需要安装相应的组件,这里以windows平台和mac平台为例:Windows平台的windows用户需要安装popplerforWindows,安装链接是:http://blog.alivate.com.au/poppler-windows/另外需要添加环境变量,将bin文件夹的路径添加到环境变量PATH中。注意这里配置后需要重启电脑才能生效,否则会报错Mac。对于mac用户,您需要为Mac安装poppler。具体可以参考这个链接:http://macappstore.org/poppler/详细代码如下:importosfrompdf2imageimportconvert_from_path,convert_from_bytesdefconvert_to_pic(filepath,pic_dirpath):"""PDF的每一页都转换成图片@paramfilepath:pdf文件路径@parampic_dirpath:图片目录路径@return:"""print(filepath)ifnotos.path.exists(pic_dirpath):os.makedirs(pic_dirpath)images=convert_from_bytes(open(filepath,'rb').read())#images=convert_from_path(filepath,dpi=200)forimageinimages:#保存图片pic_filepath=os.path.join(pic_dirpath,'img_'+str(images.index(image))+'.png')image.save(pic_filepath,'PNG')#ConvertPDFtoimageconvert_to_pic(filepath,pic_dirpath)图片取自《易方达中小盘混合型证券投资基金2020年半年度报告》作为示例部分中的示例。该文件共有46页。保存的PDF照片如下:共46张8.添加水印添加水印后的效果如下:制作水印时,可以自定义水印内容、透明度、斜率、字符间宽度等,以及可操作性比较好。之前写过一篇文章,写的很详细:Python快速给PDF文件添加自定义水印。9、文档加解密当您打开一些PDF文件时,会弹出如下界面:这表示该PDF文件是加密的,需要输入相应的密码才能打开。本节所讲的只是基于PDF文档的加解密,并不是所谓的PDF密码破解。加密PDF文件需要用到encrypt函数,对应的加密代码比较简单:importosfromPyPDF2importPdfFileReader,PdfFileWriterdefencrypt_pdf(filepath,save_filepath,passwd='xiaoyi'):"""PDF文档加密@paramfilepath:PDF文件路径@paramsave_filepath:加密文件保存路径@parampasswd:密码@return:"""pdf_reader=PdfFileReader(filepath)pdf_writer=PdfFileWriter()forpage_indexinrange(pdf_reader.getNumPages()):pdf_writer.addPage(pdf_reader.getPage(page_index))#添加密码pdf_writer.encrypt(passwd)withopen(save_filepath,"wb")asout:pdf_writer.write(out)#文档加密encrypt_pdf(filepath,save_filepath,passwd='xiaoyi')code执行成功后,需要再次输入密码才能打开PDF文件。按照这个思路,破解PDF也可以通过暴力破解的方式来实现,比如:通过本地密码本一个一个的尝试,或者按照数字+字母的密码形式循环尝试,最后是成功打开的密码是破解密码。以上破解方法费时费力,不建议尝试。另外,对于加密的PDF文件,还可以使用decrypt函数对其进行解密。解密代码如下:defdecrypt_pdf(filepath,save_filepath,passwd='xiaoyi'):"""解密PDF文档并保存为未加密的PDF@paramfilepath:PDF文件路径@paramsave_filepath:解密后的文件保存路径@parampasswd:password@return:"""pdf_reader=PdfFileReader(filepath)#PDF文档解密pdf_reader.decrypt('xiaoyi')pdf_writer=PdfFileWriter()forpage_indexinrange(pdf_reader.getNumPages()):pdf_writer.addPage(pdf_reader.getPage(page_index))withopen(save_filepath,"wb")asout:pdf_writer.write(out)#文档解密decrypt_pdf(filepath,save_filepath,passwd='xiaoyi')解密完成后,PDF文档做打开后不需要输入密码,如果需要加密,可以重新执行加密代码。以上就是Python操作PDF的全部内容。文中贴出的代码已经过测试,可以正常运行。