首页 > 编程 > Python > 正文

Python 实现加密过的PDF文件转WORD格式

2020-02-15 21:26:22
字体:
来源:转载
供稿:网友

实现方法简介

许多文件都支持转换为PDF格式,诸如Word,Excel,PowerPoint,Cad以及图片格式。所以pdf从学校到职场,都可以看到pdf文件的身影。

为了保证了文件的安全性,正常情况下无法对pdf的内容进行编辑。但是相应的我们就无法修改pdf的内容,也不便于pdf资料的使用。虽然现在市面上有很多 pdf 转 word 软件,比如 wps,但大多数的软件是要收费的,并且价格不菲。前些天就有人叫我帮她把 pdf 文档转成 word 的文档。因为写尽调报告需要去查看各种信评资料,往往这些资料都是pdf格式的文件,而且经常出现加密文档,为了方便查找和复制相关资料,将加密过的pdf文件转换成word文档就会便捷不少,提高使用效率。

于是想到写个程序,把 pdf 转成 word 文档。秉承着不要重复造轮子的想法,我首先在网上搜索了下相关代码。大多是针对未加密过的pdf文件来实现,本文结合加密文档的特殊性写了相关程序来实现这个功能。

支持加密文件的格式转换

代码效果

环境配置

1、pdfminer安装库命令:

pip install pdfminer3k

2、docx安装库命令:

pip install python_docx

注:pdf中非图片构成的部分才能被成功转换:

#-*- coding: UTF-8 -*- #!/usr/bin/python#-*- coding: utf-8 -*-import sysimport importlibimportlib.reload(sys)from pdfminer.pdfparser import PDFParser,PDFDocumentfrom pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreterfrom pdfminer.converter import PDFPageAggregatorfrom pdfminer.layout import *from pdfminer.pdfinterp import PDFTextExtractionNotAllowedimport os#设置工作目录文件夹os.chdir(r'c:/users/dicey/desktop/codes/pdf-docx')#解析pdf文件函数def parse(pdf_path): fp = open('diya.pdf', 'rb') # 以二进制读模式打开 # 用文件对象来创建一个pdf文档分析器 parser = PDFParser(fp) # 创建一个PDF文档 doc = PDFDocument() # 连接分析器 与文档对象 parser.set_document(doc) doc.set_parser(parser) # 提供初始化密码 # 如果没有密码 就创建一个空的字符串 doc.initialize() # 检测文档是否提供txt转换,不提供就忽略 if not doc.is_extractable:  raise PDFTextExtractionNotAllowed else:  # 创建PDf 资源管理器 来管理共享资源  rsrcmgr = PDFResourceManager()  # 创建一个PDF设备对象  laparams = LAParams()  device = PDFPageAggregator(rsrcmgr, laparams=laparams)  # 创建一个PDF解释器对象  interpreter = PDFPageInterpreter(rsrcmgr, device)  # 用来计数页面,图片,曲线,figure,水平文本框等对象的数量  num_page, num_image, num_curve, num_figure, num_TextBoxHorizontal = 0, 0, 0, 0, 0  # 循环遍历列表,每次处理一个page的内容  for page in doc.get_pages(): # doc.get_pages() 获取page列表   num_page += 1 # 页面增一   interpreter.process_page(page)   # 接受该页面的LTPage对象   layout = device.get_result()   for x in layout:    if isinstance(x,LTImage): # 图片对象     num_image += 1    if isinstance(x,LTCurve): # 曲线对象     num_curve += 1    if isinstance(x,LTFigure): # figure对象     num_figure += 1    if isinstance(x, LTTextBoxHorizontal): # 获取文本内容     num_TextBoxHorizontal += 1 # 水平文本框对象增一     # 保存文本内容     with open(r'test2.doc', 'a',encoding='utf-8') as f: #生成doc文件的文件名及路径      results = x.get_text()      f.write(results)      f.write('/n')  print('对象数量:/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文件路径及文件名 parse(pdf_path)            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表