许多文件都支持转换为PDF格式,诸如Word, Excel, PowerPoint, Cad以及图片格式,所以PDF从学校到职场,都可以看到PDF文件的身影。
为了保证了文件的安全性,正常情况下无法对pdf的内容进行编辑。但是相应的我们就无法修改pdf的内容,也不便于pdf资料的使用。虽然现在市面上有很多pdf转字软件,比如wps,但大多数的软件是要收费的,并且价格不菲。前些天就有人叫我帮她把pdf文档转成词的文档。因为写尽调报告需要去查看各种信评资料,往往这些资料都是pdf格式的文件,而且经常出现加密文档,为了方便查找和复制相关资料,将加密过的pdf文件转换成词文档就会便捷不少,提高使用效率。
于是想到写个程序,把pdf转成词文档。秉承着不要重复造轮子的想法,我首先在网上搜索了下相关代码。大多是针对未加密过的pdf文件来实现,本文结合加密文档的特殊性写了相关程序来实现这个功能。
代码效果
环境配置
1, pdfminer安装库命令:
<代码> pip安装pdfminer3k 代码>
2,多克斯安装库命令:
<代码> pip安装python_docx 代码>
注:pdf中非图片构成的部分才能被成功转换:
# - * -编码:utf - 8 - * # !/usr/bin/python # - * -编码:utf - 8 - * 导入系统 进口importlib importlib.reload(系统) 从pdfminer。pdfparser进口pdfparser PDFDocument 从pdfminer。pdfinterp进口PDFResourceManager PDFPageInterpreter 从pdfminer。转换器进口PDFPageAggregator 从pdfminer。布局导入* 从pdfminer。pdfinterp进口PDFTextExtractionNotAllowed 进口操作系统 #设置工作目录文件夹 os.chdir (r 'c:/用户/冒险/桌面/编码/pdf-docx”) #解析pdf文件函数 def解析(pdf_path): fp=(“迪亚开放。pdf, rb) #以二进制读模式打开 #用文件对象来创建一个pdf文档分析器 解析器=PDFParser (fp) 文#创建一个PDF档 医生=PDFDocument () #连接分析器与文档对象 parser.set_document (doc) doc.set_parser(解析) #提供初始化密码 #如果没有密码就创建一个空的字符串 doc.initialize () #检测文档是否提供txt转换,不提供就忽略 如果不是doc.is_extractable: 提高PDFTextExtractionNotAllowed 其他: #创建PDf资源管理器来管理共享资源 rsrcmgr=PDFResourceManager () #创建一个PDF设备对象 laparams=laparams () 设备=PDFPageAggregator (rsrcmgr laparams=laparams) #创建一个PDF解释器对象 翻译=PDFPageInterpreter (rsrcmgr,设备) #用来计数页面,图片,曲线,图中,水平文本框等对象的数量 num_page、num_image num_curve、num_figure num_TextBoxHorizontal=0, 0, 0, 0, 0 #循环遍历列表,每次处理一个页面的内容 在doc.get_pages页面():# doc.get_pages()获取页面列表 num_page +=1 #页面增一 interpreter.process_page(页面) #接受该页面的LTPage对象 布局=device.get_result () x的布局: 如果isinstance (x, LTImage): #图片对象 num_image +=1 如果isinstance (x, LTCurve): #曲线对象 num_curve +=1 如果isinstance (x, LTFigure): #图对象 num_figure +=1 如果isinstance (x, LTTextBoxHorizontal): #获取文本内容 num_TextBoxHorizontal +=1 #水平文本框对象增一 #保存文本内容 与(r 'test2开放。医生”、“一个”,编码=皍tf - 8”)作为f: #生成医生文件的文件名及路径 结果=x.get_text () f.write(结果) f.write(“\ n”) 打印(“对象数量:\ n”、“页面数:% s \ n ' % num_page,”图片数:% s \ n ' % num_image,“曲线数:% s \ n ' % num_curve,“水平文本框:% s \ n” % num_TextBoxHorizontal) if __name__==癬_main__”: pdf_path=r 'diya。pdf的# pdf文件路径及文件名 解析(pdf_path)
提供初始化密码
如果没有密码就创建一个空的字符串
<代码> doc.initialize() 代码>
如果有密码就写入相应的密码
如果pdf文件的加密方式不知道,影响文件的复制和打印等可以先利用chrome浏览器来取消加密逻辑
实现方式很简单,只需要将加密的文件拖入到chrome浏览器再选择打印另存为就可以,破除加密后再使用程序转换文件格式
以上所述是小编给大家介绍的Python实现加密过的PDF文件转字格式,希望对大家有所帮助!