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学习笔记 下载
Feb 10 Python
零基础写python爬虫之HTTP异常处理
Nov 05 Python
python实现ipsec开权限实例
Nov 11 Python
Python实现将数据库一键导出为Excel表格的实例
Dec 30 Python
python引入导入自定义模块和外部文件的实例
Jul 24 Python
pytorch 常用线性函数详解
Jan 15 Python
python标准库os库的函数介绍
Feb 12 Python
Python无头爬虫下载文件的实现
Apr 02 Python
python--shutil移动文件到另一个路径的操作
Jul 13 Python
详解python os.path.exists判断文件或文件夹是否存在
Nov 16 Python
python 用pandas实现数据透视表功能
Dec 21 Python
Python利用capstone实现反汇编
Apr 06 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中使用模板的方法
2008/05/24 PHP
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
js图片自动切换效果处理代码
2013/05/07 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
2015/11/02 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
微信小程序自定义导航教程(兼容各种手机)
2018/12/12 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
深入学习python的yield和generator
2016/03/10 Python
python中reload(module)的用法示例详解
2017/09/15 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
python批量导入数据进Elasticsearch的实例
2018/05/30 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
拿来就用!Python批量合并PDF的示例代码
2020/08/10 Python
华为C++笔试题
2014/08/05 面试题
表决心的诗句大全
2014/03/11 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
集中整治工作方案
2014/05/01 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
摘录式读书笔记
2015/07/01 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书
Python基础之元组与文件知识总结
2021/05/19 Python
浅谈MySQL表空间回收的正确姿势
2021/10/05 MySQL
Mybatis是这样防止sql注入的
2021/12/06 Java/Android