如何使用Python pdfminer将PDF转HTML?报AttributeError如何解决?
报错原因
AttributeError: 'str' object has no attribute 'write'是因为HTMLConverter/TextConverter的第二个参数要求传入可写的文件对象,你传的是字符串格式的存储路径,字符串本身没有write方法,所以触发报错。- 你现有代码还存在其他逻辑问题:输入输出路径搞反、Windows路径未转义、同时混用了pdfminer和pdftohtml两套转换逻辑,没有必要。
可运行的PDF转HTML代码(pdfminer实现)
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.pdfpage import PDFPage from pdfminer.converter import HTMLConverter, TextConverter from pdfminer.layout import LAParams # 配置参数 convert_format = 'html' # 可改成text对应纯文本转换 pdf_path = r"A:\folder\insurance.pdf" # 原始PDF路径,加r避免反斜杠转义问题 output_path = r"A:\folder\pyhtml.html" # 输出HTML文件路径 convert_pages = [0] # 转换的页码,pdfminer页码从0开始计数 # 初始化转换资源 rsrcmgr = PDFResourceManager() laparams = LAParams() converter = HTMLConverter if convert_format == 'html' else TextConverter # 以写模式打开输出文件,传入文件对象 with open(output_path, 'wb') as out_fp: device = converter(rsrcmgr, out_fp, codec='utf-8', laparams=laparams) interpreter = PDFPageInterpreter(rsrcmgr, device) # 读取待转换的PDF文件 with open(pdf_path, 'rb') as in_fp: for page in PDFPage.get_pages(in_fp, pagenos=convert_pages, maxpages=1): interpreter.process_page(page) device.close()
如果你倾向用pdftohtml命令行的简化实现
import os pdf_filename = r"A:\folder\insurance.pdf" output_html_path = r"A:\folder\pyhtml.html" # 直接输出HTML无需中转XML,Windows系统将>/dev/null改成>nul即可 cmd = f'pdftohtml -nodrm -zoom 1.5 -enc UTF-8 -noframes "{pdf_filename}" "{output_html_path}"' os.system(cmd + " >nul 2>&1") # 如需读取转换后的HTML内容 with open(output_html_path, 'r', encoding='utf-8') as f: result = f.read()
内容的提问来源于stack exchange,提问作者jerin
相关产品推荐
相关产品推荐

