|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#pip install PyPDF2 python-docx
import os
import PyPDF2
from docx import Document
def pdf_to_docx(input_path, output_path):
pdf_file = open(input_path, 'rb')
pdf_reader = PyPDF2.PdfReader(pdf_file)
document = Document()
for page_num, page in enumerate(pdf_reader.pages, start=1):
page = pdf_reader.pages(page_num)
text = page.extract_text()
paragraph = document.add_paragraph()
paragraph.add_run(text)
document.save(output_path)
pdf_file.close()
# 示例用法
input_file = 'f:\\'+input('请输入要转换的文件名')+'.pdf'
output_file = 'f:\\'+input('请输入要保存的文件名')+'.docx'
pdf_to_docx(input_file, output_file)
错误信息
请输入要转换的文件名123
请输入要保存的文件名456
Traceback (most recent call last):
File "D:\Python\pdf转docx.py", line 26, in <module>
pdf_to_docx(input_file, output_file)
File "D:\Python\pdf转docx.py", line 14, in pdf_to_docx
page = pdf_reader.pages(page_num)
TypeError: '_VirtualList' object is not callable
进程已结束,退出代码1
看起来你在使用 PyPDF2 库提取 PDF 页面的时候遇到了问题。问题在这一行代码:
page = pdf_reader.pages(page_num)
pdf_reader.pages 是一个列表,而不是一个函数。你尝试通过调用它来获取页面,这是不正确的。你已经在 for 循环中遍历了这个列表并获取了每个页面,所以你应该直接使用 page 变量,而不是尝试再次从 pdf_reader.pages 中获取页面。以下是你应该怎么做:
for page_num, page in enumerate(pdf_reader.pages, start=1):
text = page.extract_text()
paragraph = document.add_paragraph()
paragraph.add_run(text)
此外,注意到你在创建 Document 对象后,使用了 add_paragraph() 来添加段落,但在之后使用 add_run() 向这个新段落中添加文本。 add_run() 是用来向一个已经存在的段落中添加文本的。如果你想在一个新的段落中添加文本,你可以直接在 add_paragraph() 方法中添加,例如:
for page_num, page in enumerate(pdf_reader.pages, start=1):
text = page.extract_text()
document.add_paragraph(text)
你的错误信息 '_VirtualList' object is not callable 就是因为你尝试调用了一个列表对象,而这个对象并不是一个函数。这个修改应该能够解决你的问题。如果还有其他问题,请随时提问。
|
|