【写在前面】
以前为了写毕业论文,经常上网找各种论文,然后进行ctrl + c /ctrl +v。当时很多论文都是PDF格式,而且不能复制到文中的文字。现在还记得,当初在 网上下载各种PDF转WORD的工具,有些软件还是收费的。今天我就自己开发一个pdf转word的小工具,回敬从前弱小的我!
【示例代码】
1、GUI制作软件界面:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'pdf2word.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import change
class Ui_Dialog(QtWidgets.QDialog):
def setupUi(self, Dialog):
Dialog.setObjectName("PDF转Word工具界面")
Dialog.resize(527, 369)
# 设置窗口背景,并且自适应窗口大小
palette = QtGui.QPalette()
pix = QtGui.QPixmap("12.jpg")
pix = pix.scaled(Dialog.width(), Dialog.height())
palette.setBrush(QtGui.QPalette.Background, QtGui.QBrush(pix))
Dialog.setPalette(palette)
self.label = QtWidgets.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(380, 300, 101, 41))
self.label.setStyleSheet("font: 12pt \"新宋体\";\n"
"background-color: rgb(85, 255, 255);")
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(380, 130, 91, 61))
self.pushButton.setStyleSheet("font: 12pt \"黑体\";\n"
"background-color: rgb(0, 255, 0);")
self.pushButton.setObjectName("pushButton")
self.plainTextEdit = QtWidgets.QPlainTextEdit(Dialog)
self.plainTextEdit.setGeometry(QtCore.QRect(50, 120, 300, 161))
self.plainTextEdit.setStyleSheet("font: 11pt \"宋体\";")
self.plainTextEdit.setObjectName("plainTextEdit")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "PDF转Word工具界面"))
self.label.setText(_translate("Dialog", " 鹏哥出品 "))
self.pushButton.setText(_translate("Dialog", "选择文件"))
self.plainTextEdit.setPlainText("欢迎使用!")
self.pushButton.clicked.connect(self.get_pdffile)
# 从本地电脑加载PDF文件
def get_pdffile(self):
self.plainTextEdit.setPlainText("开始转换pdf文件……")
filename,_ = QtWidgets.QFileDialog.getOpenFileName(self, "打开文件", "", "*.pdf;;All Files(*)")
print(filename)
newname = filename.split("/")[-1] + ".doc"
change.parse(filename,newname)
self.plainTextEdit.setPlainText("pdf文件转换完成!\n文件名为%s" %newname)
if __name__ == "__main__":
app =QtWidgets.QApplication(sys.argv)
main = QtWidgets.QDialog()
mainwindow = Ui_Dialog()
mainwindow.setupUi(main)
main.show()
sys.exit(app.exec())
2、PDF转WORD:
# coding=utf-8
# @Auther : "鹏哥贼优秀"
# @Date : 2019/8/23
# @Software : PyCharm
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.layout import LAParams
from pdfminer.converter import PDFPageAggregator
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
def parse(filename,newfile):
# rb以二进制读模式打开本地pdf文件
fn = open(filename, 'rb')
# 创建一个pdf文档分析器
parser = PDFParser(fn)
# 创建一个PDF文档
doc = PDFDocument()
# 连接分析器 与文档对象
parser.set_document(doc)
doc.set_parser(parser)
# 提供初始化密码doc.initialize("XXX")
# 如果没有密码 就创建一个空的字符串
doc.initialize("")
# 检测文档是否提供txt转换,不提供就忽略
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
else:
# 创建PDf资源管理器
resource = PDFResourceManager()
# 创建一个PDF参数分析器
laparams = LAParams()
# 创建聚合器,用于读取文档的对象
device = PDFPageAggregator(resource, laparams=laparams)
# 创建解释器,对文档编码,解释成Python能够识别的格式
interpreter = PDFPageInterpreter(resource, device)
# 循环遍历列表,每次处理一页的内容
# doc.get_pages() 获取page列表
for page in doc.get_pages():
# 利用解释器的process_page()方法解析读取单独页数
interpreter.process_page(page)
# 使用聚合器get_result()方法获取内容
layout = device.get_result()
# 这里layout是一个LTPage对象,里面存放着这个page解析出的各种对象
for out in layout:
# 判断是否含有get_text()方法,获取我们想要的文字
if hasattr(out, "get_text"):
print(out.get_text())
with open(newfile, 'a') as f:
f.write(out.get_text() + '\n')
if __name__ == '__main__':
parse("李清照诗词_簪花小楷字帖.pdf","test1.txt")
【效果如下】
选的是 李清照的一些诗词,格式为PDF,最后转成WORD。
【知识点】
1、GUI如何设置自适应背景图?
# 设置窗口背景,并且自适应窗口大小 palette = QtGui.QPalette() pix = QtGui.QPixmap("12.jpg") pix = pix.scaled(Dialog.width(), Dialog.height()) palette.setBrush(QtGui.QPalette.Background, QtGui.QBrush(pix)) Dialog.setPalette(palette)
(1)先实例化GUI库中的调色板对象,然后导入需要作为背景的图片。(这是我司的雪景,不错吧!)
(2)通过scaled函数,根据主窗口的长宽进行调整背景大小
(3)最后设置调色板实例的刷子进行背景内容填充。
2、PDF转WORD功能代码:
这段代码其实是参考大神写的代码 :
https://yq.aliyun.com/articles/487610?utm_content=m_42525
整体思路为:构造文档对象,解析文档对象,提取所需内容。
构造文档对象:
解析文档对象流程:
【写在最后】
现在发现每周 五晚上,找个咖啡馆安静地写写东西,还 是 蛮有意思的,有点回到了大学时期待每周五晚上一样。
【参考】
https://yq.aliyun.com/articles/487610?utm_content=m_42525