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设计模式编程中的访问者与观察者模式
Jan 26 Python
Python的装饰器使用详解
Jun 26 Python
Python文件和流(实例讲解)
Sep 12 Python
Python面向对象class类属性及子类用法分析
Feb 02 Python
python实现抖音点赞功能
Apr 07 Python
解决pycharm 安装numpy失败的问题
Dec 05 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
python使用opencv resize图像不进行插值的操作
Jul 05 Python
详解python datetime模块
Aug 17 Python
Python实现自动签到脚本的示例代码
Aug 19 Python
Django框架实现在线考试系统的示例代码
Nov 30 Python
pandas按条件筛选数据的实现
Feb 20 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
php数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
CI框架表单验证实例详解
2016/11/21 PHP
PHP7.3.10编译安装教程
2019/10/08 PHP
js倒计时小程序
2013/11/05 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
2017/06/12 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
浅析JavaScript 函数柯里化
2020/09/08 Javascript
python cookielib 登录人人网的实现代码
2012/12/19 Python
pycharm 使用心得(五)断点调试
2014/06/06 Python
用python与文件进行交互的方法
2018/03/01 Python
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
Python数据正态性检验实现过程
2020/04/18 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
python ETL工具 pyetl
2020/06/07 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
Python Map 函数的使用
2020/08/28 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
美国美妆网站:B-Glowing
2016/10/12 全球购物
商场消防管理制度
2014/01/12 职场文书
镇创先争优活动总结
2014/08/28 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS
浅谈Python协程asyncio
2021/06/20 Python