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中的exec、eval使用实例
Sep 23 Python
python使用电子邮件模块smtplib的方法
Aug 28 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
Feb 18 Python
python 列表推导式使用详解
Aug 29 Python
用Python画一个LinkinPark的logo代码实例
Sep 10 Python
Win下PyInstaller 安装和使用教程
Dec 25 Python
python3 配置logging日志类的操作
Apr 08 Python
Keras官方中文文档:性能评估Metrices详解
Jun 15 Python
python脚本第一行如何写
Aug 30 Python
python常量折叠基础知识点讲解
Feb 28 Python
pycharm 如何查看某一函数源码的快捷键
May 12 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 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一句话cmdshell新型 (非一句话木马)
2009/04/18 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
使用php的HTTP请求的库Requests实现美女图片墙
2015/02/22 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
php实现微信支付之现金红包
2018/05/30 PHP
jquery随意添加移除html的实现代码
2011/06/21 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
Highcharts入门之简介
2016/08/02 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
2020/04/16 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
vue+element获取el-table某行的下标,根据下标操作数组对象方式
2020/08/07 Javascript
Python基础中所出现的异常报错总结
2016/11/19 Python
python版简单工厂模式
2017/10/16 Python
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
2018/08/03 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
Python实现简单石头剪刀布游戏
2021/01/20 Python
Numpy的简单用法小结
2019/08/28 Python
Python如何爬取qq音乐歌词到本地
2020/06/01 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
您的网上新华书店:文轩网
2016/08/24 全球购物
水芝澳美国官网:H2O Plus
2016/10/15 全球购物
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
反腐倡廉剖析材料
2014/09/30 职场文书
学生犯错保证书
2015/05/09 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
小学体育队列队形教学反思
2016/02/16 职场文书
nginx访问报403错误的几种情况详解
2022/07/23 Servers