python如何把pdf转word
在Python中将PDF转换为Word文档(.docx
)比反向转换(Word转PDF)更具挑战性,因为PDF是固定格式,而Word是可编辑格式。以下是几种可行的方法及详细步骤:
方法1:使用 pdf2docx
库
pdf2docx
是一个专门用于将PDF转换为Word的Python库,支持文本、表格和图片的转换。
安装与使用:
pip install pdf2docx
示例代码:
from pdf2docx import Converterdef pdf_to_word(pdf_path, word_path):cv = Converter(pdf_path)cv.convert(word_path, start=0, end=None) # start和end指定页码范围cv.close()# 示例
pdf_to_word("input.pdf", "output.docx")
特点:
- 支持文本、表格和图片(部分保真)。
- 可指定转换的页码范围。
方法2:使用 PyMuPDF
(fitz
) + python-docx
结合PyMuPDF
提取PDF内容,再用python-docx
生成Word文档。
安装:
pip install pymupdf python-docx
示例代码:
import fitz # PyMuPDF
from docx import Documentdef pdf_to_word(pdf_path, word_path):doc = Document()pdf = fitz.open(pdf_path)for page in pdf:text = page.get_text("text") # 提取文本doc.add_paragraph(text)doc.save(word_path)# 示例
pdf_to_word("input.pdf", "output.docx")
局限:
- 仅提取文本,不保留表格、图片或复杂格式。
方法3:使用 pdfminer.six
+ python-docx
pdfminer.six
是另一个PDF文本提取工具,适合纯文本转换。
安装:
pip install pdfminer.six python-docx
示例代码:
from pdfminer.high_level import extract_text
from docx import Documentdef pdf_to_word(pdf_path, word_path):text = extract_text(pdf_path)doc = Document()doc.add_paragraph(text)doc.save(word_path)# 示例
pdf_to_word("input.pdf", "output.docx")
局限:
- 同样不保留表格、图片或格式。
方法4:使用商业API(如Adobe PDF Services)
对于高保真转换(保留格式、表格等),可使用商业API:
示例(Adobe PDF Services):
from adobe.pdfservices.operation import ExecutionContext, CreatePDFOperation
from adobe.pdfservices.operation.io import FileRef# 需注册Adobe账号并获取API密钥
def pdf_to_word(pdf_path, word_path):# 初始化客户端(代码略,需参考Adobe官方文档)# ...pass# 示例(需配置API)
pdf_to_word("input.pdf", "output.docx")
特点:
- 高保真转换,但需付费。
注意事项
- 格式保真:
pdf2docx
是开源库中效果较好的选择,但复杂PDF可能仍需手动调整。
- OCR支持:
- 若PDF是扫描件(图片),需先用OCR工具(如
pytesseract
)提取文本。
- 若PDF是扫描件(图片),需先用OCR工具(如
- 性能:
- 大文件转换可能较慢,建议分页处理。
完整示例(推荐pdf2docx
)
from pdf2docx import Converterdef convert_pdf_to_word(pdf_file, word_file):try:cv = Converter(pdf_file)cv.convert(word_file)cv.close()print(f"转换成功:{word_file}")except Exception as e:print(f"转换失败:{e}")# 使用示例
convert_pdf_to_word("document.pdf", "document.docx")
根据需求选择方法:优先尝试pdf2docx
,若需更高精度再考虑商业API。