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


Posted in Python onFebruary 04, 2020

实现方法简介

许多文件都支持转换为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 sys
import importlib
importlib.reload(sys)
from pdfminer.pdfparser import PDFParser,PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import *
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
import 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)

提供初始化密码

如果没有密码 就创建一个空的字符串

doc.initialize()

如果有密码 就写入相应的密码

未知加密方式的pdf文件

如果pdf文件的加密方式不知道,影响文件的复制和打印等可以先利用chrome浏览器来取消加密逻辑

实现方式很简单,只需要将加密的文件拖入到chrome浏览器再选择打印另存为就可以,破除加密后再使用程序转换文件格式

总结

以上所述是小编给大家介绍的Python 实现加密过的PDF文件转WORD格式,希望对大家有所帮助!

Python 相关文章推荐
跟老齐学Python之编写类之四再论继承
Oct 11 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
基于numpy中数组元素的切片复制方法
Nov 15 Python
python pygame模块编写飞机大战
Nov 20 Python
Django框架用户注销功能实现方法分析
May 28 Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 Python
pytorch 常用线性函数详解
Jan 15 Python
Python如何获取文件指定行的内容
May 27 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
Jul 21 Python
Python用Jira库来操作Jira
Dec 28 Python
pytest配置文件pytest.ini的详细使用
Apr 17 Python
解决tensorflow打印tensor有省略号的问题
Feb 04 #Python
对Tensorflow中tensorboard日志的生成与显示详解
Feb 04 #Python
在 Python 中接管键盘中断信号的实现方法
Feb 04 #Python
在TensorFlow中屏蔽warning的方式
Feb 04 #Python
Python和Anaconda和Pycharm安装教程图文详解
Feb 04 #Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 #Python
python with (as)语句实例详解
Feb 04 #Python
You might like
PHP音乐采集(部分代码)
2007/02/14 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
php中关于换行的实例写法
2019/09/26 PHP
JavaScript Event学习第十章 一些可替换的事件对
2010/02/10 Javascript
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
select多选 multiple的使用示例
2014/06/16 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
js匿名函数使用&传参(实例)
2017/09/08 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
VSCode launch.json配置详细教程
2020/06/18 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
Python 处理数据的实例详解
2017/08/10 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
python实现控制COM口的示例
2019/07/03 Python
Python shelve模块实现解析
2019/08/28 Python
Python使用OpenPyXL处理Excel表格
2020/07/02 Python
python 读取串口数据的示例
2020/11/09 Python
详解Python中openpyxl模块基本用法
2021/02/23 Python
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
.NET面试问题集
2015/12/08 面试题
车间安全生产标语
2014/06/06 职场文书
公务员群众路线专题民主生活会发言材料
2014/09/17 职场文书
小学班级标语口号大全
2015/12/26 职场文书
JavaScript实现登录窗体
2021/06/22 Javascript