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中的yield浅析
Jun 16 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
Python简单计算文件MD5值的方法示例
Apr 11 Python
Python 多维List创建的问题小结
Jan 18 Python
python 使用pandas计算累积求和的方法
Feb 08 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
May 26 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
用pandas划分数据集实现训练集和测试集
Jul 20 Python
基于Python实现全自动下载抖音视频
Nov 06 Python
Django框架实现在线考试系统的示例代码
Nov 30 Python
TensorFlow的自动求导原理分析
May 26 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
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
jQuery 事件队列调整方法
2009/09/18 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
javascript中的self和this用法小结
2014/02/08 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
2014/04/12 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
Javascript中的包装类型介绍
2015/04/02 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
python操作字典类型的常用方法(推荐)
2016/05/16 Python
Python+tkinter使用80行代码实现一个计算器实例
2018/01/16 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
python smtplib发送带附件邮件小程序
2018/05/22 Python
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
python代码如何注释
2020/06/01 Python
西班牙床垫网上商店:Colchones.es
2018/05/06 全球购物
分公司经理岗位职责
2013/11/11 职场文书
酒店副总经理岗位职责范本
2014/02/04 职场文书
求职信的七个关键技巧
2014/02/05 职场文书
《北京的春节》教学反思
2014/04/07 职场文书
安全演讲稿大全
2014/05/09 职场文书
十佳党员事迹材料
2014/08/28 职场文书
三严三实学习心得体会
2014/10/13 职场文书
中学生自我评价范文
2015/03/03 职场文书
工作自我评价范文
2015/03/05 职场文书
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技
Vue Element plus使用方法梳理
2022/12/24 Vue.js