Python如何读取PDF/Word文档保留项目符号列表结构并生成HTML
针对Word文档的处理方案
- 优先使用
python-docx库,可直接读取docx格式的原生文档结构,无需额外推断格式。每个段落对象的style属性可直接识别是否为列表项,paragraph.level属性直接返回嵌套层级:0对应一级列表,1对应二级列表,以此类推。 - 区分列表类型:通过
paragraph._p.pPr.numPr节点属性可判断是有序列表(数字、字母等编号类型)还是无序列表(圆点、方块等项目符号),可直接映射为HTML的<ol>、<ul>标签。
针对PDF文档的处理方案
PDF本身无原生列表语义,需根据格式特征推断,分两类场景处理:
- 可复制文本的原生PDF:使用
PyMuPDF(fitz)库读取每个文本块的坐标、缩进值,通过缩进量的差值划分嵌套层级,比如0-20磅映射为一级列表,20-40磅映射为二级列表;同时匹配行首的项目符号特征(•、□、-、1.、a.等规则符号),识别列表类型。 - 扫描版PDF:先通过
pytesseract配合OpenCV做OCR识别,先对文档做倾斜校正后提取文本和对应坐标,后续层级识别逻辑和原生PDF一致。
通用HTML转换逻辑
- 提取内容时按顺序存储每个元素的三类属性:内容文本、类型(普通段落/无序列表项/有序列表项)、嵌套层级数值
- 生成HTML时遍历元素列表,动态维护当前层级栈:遇到层级高于当前栈顶时新增对应
<ul>/<ol>标签,层级低于当前栈顶时闭合对应数量的列表标签,所有列表项统一用<li>包裹,普通段落直接用<p>标签即可。 - 兼容技巧:如果文档格式复杂度较高,可先将原文档手动/通过LibreOffice命令行另存为中间HTML格式,再用
BeautifulSoup解析提取结构,容错率远高于直接解析原生文档。
内容的提问来源于stack exchange,提问作者Guiffou Joel
相关产品推荐
相关产品推荐

