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 相关文章推荐
python3使用urllib示例取googletranslate(谷歌翻译)
Jan 23 Python
http请求 request失败自动重新尝试代码示例
Jan 25 Python
Python批量提取PDF文件中文本的脚本
Mar 14 Python
python获取程序执行文件路径的方法(推荐)
Apr 26 Python
Python Pandas批量读取csv文件到dataframe的方法
Oct 08 Python
Django添加KindEditor富文本编辑器的使用
Oct 24 Python
python pyheatmap包绘制热力图
Nov 09 Python
解决Python设置函数调用超时,进程卡住的问题
Aug 08 Python
Python跑循环时内存泄露的解决方法
Jan 13 Python
Django用户身份验证完成示例代码
Apr 03 Python
keras 获取某层的输入/输出 tensor 尺寸操作
Jun 10 Python
Anaconda的安装与虚拟环境建立
Nov 18 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
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
php单件模式结合命令链模式使用说明
2008/09/07 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
Javascript valueOf 使用方法
2008/12/28 Javascript
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
three.js快速入门【推荐】
2017/01/21 Javascript
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
基于AngularJS实现表单验证功能
2017/07/28 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
新手如何快速理解js异步编程
2019/06/24 Javascript
vue swipe自定义组件实现轮播效果
2019/07/03 Javascript
Python使用ftplib实现简易FTP客户端的方法
2015/06/03 Python
Python编码爬坑指南(必看)
2016/06/10 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
家佳咖啡店创业计划书
2013/12/27 职场文书
护校行动方案
2014/05/31 职场文书
怎么写工作检讨书
2014/11/16 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
MySQL 逻辑备份与恢复测试的相关总结
2021/05/14 MySQL
php实例化对象的实例方法
2021/11/17 PHP
MySQL 逻辑备份 into outfile
2022/05/15 MySQL