from tkinter import * from pdfminer.pdfparser import PDFParser from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import PDFPageAggregator, TextConverter from pdfminer.layout import LAParams, LTTextBoxHorizontal from pdfminer.pdfpage import PDFPage class PDFViewer: def init(self, master): self.master = master master.title("PDF Viewer") # 创建文本框和滚动条 self.text = Text(master) self.scrollbar = Scrollbar(master, command=self.text.yview) self.text.configure(yscrollcommand=self.scrollbar.set) self.text.pack(side=LEFT, fill=BOTH, expand=True) self.scrollbar.pack(side=RIGHT, fill=Y) # 打开 PDF 文件 fp = open('x1/2023凯程333教育综合应试解析-外国教育史(OCR).pdf', 'rb') # 创建 PDF 解析器 parser = PDFParser(fp) # 创建 PDF 文档对象 document = PDFDocument(parser) # 获取页面布局参数 laparams = LAParams() # 创建 PDF 资源管理器 rsrcmgr = PDFResourceManager() # 创建聚合器对象 device = PDFPageAggregator(rsrcmgr, laparams=laparams) # 创建 PDF 解释器 interpreter = PDFPageInterpreter(rsrcmgr, device) # 处理每一页 PDF 页面 for page in PDFPage.create_pages(document): interpreter.process_page(page) # 获取页面布局 layout = device.get_result() # 提取每一页的文本内容 for x in layout: if isinstance(x, LTTextBoxHorizontal): text = x.get_text().strip() self.text.insert(END, text + '\n') # 关闭 PDF 文件 fp.close() root = Tk() pdf_viewer = PDFViewer(root) root.mainloop()上述文本框添加保存到本地功能
时间: 2024-01-03 15:03:23 浏览: 113
要给上述的 PDFViewer 类添加保存到本地的功能,可以在 init 方法中添加一个保存按钮,并为该按钮设置一个响应函数,代码如下:
```
class PDFViewer:
def __init__(self, master):
self.master = master
master.title("PDF Viewer")
# 创建文本框和滚动条
self.text = Text(master)
self.scrollbar = Scrollbar(master, command=self.text.yview)
self.text.configure(yscrollcommand=self.scrollbar.set)
self.text.pack(side=LEFT, fill=BOTH, expand=True)
self.scrollbar.pack(side=RIGHT, fill=Y)
# 创建保存按钮
self.save_button = Button(master, text="Save", command=self.save_file)
self.save_button.pack()
# 打开 PDF 文件
self.fp = open('x1/2023凯程333教育综合应试解析-外国教育史(OCR).pdf', 'rb')
# 创建 PDF 解析器
self.parser = PDFParser(self.fp)
# 创建 PDF 文档对象
self.document = PDFDocument(self.parser)
# 获取页面布局参数
self.laparams = LAParams()
# 创建 PDF 资源管理器
self.rsrcmgr = PDFResourceManager()
# 创建聚合器对象
self.device = PDFPageAggregator(self.rsrcmgr, laparams=self.laparams)
# 创建 PDF 解释器
self.interpreter = PDFPageInterpreter(self.rsrcmgr, self.device)
# 处理每一页 PDF 页面
for page in PDFPage.create_pages(self.document):
self.interpreter.process_page(page)
# 获取页面布局
self.layout = self.device.get_result()
# 提取每一页的文本内容
for x in self.layout:
if isinstance(x, LTTextBoxHorizontal):
text = x.get_text().strip()
self.text.insert(END, text + '\n')
def save_file(self):
# 获取文本框中的内容
text = self.text.get("1.0", END)
# 弹出文件保存对话框
file_name = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text files", "*.txt")])
# 如果用户选择了保存文件的路径,则将文本写入文件
if file_name:
with open(file_name, "w", encoding="utf-8") as f:
f.write(text)
def __del__(self):
# 关闭 PDF 文件
self.fp.close()
root = Tk()
pdf_viewer = PDFViewer(root)
root.mainloop()
```
在上述代码中,我们新增了一个 save_button 按钮,并将其响应函数设为 save_file。该函数会弹出一个文件保存对话框,让用户选择保存的文件路径和文件名,然后将文本框中的内容写入文件中。注意,在类的析构函数中,我们需要关闭 PDF 文件。
阅读全文