You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandoc实现RTF转HTML时标题转换与文档分块

需求:用Pandoc Lua过滤器实现RTF转分块HTML的一步完成操作

当前操作流程

  • 第一步:将RTF转换为单个HTML文件,但生成的标题使用<strong>标签而非<h1>,需手动修改
    执行命令:
    pandoc -f rtf -t html -o inputfile.html inputfile.rtf
    
    原生成的HTML片段:
    <p><strong>George Stewart</strong></p>
    <p>Title: George Stewart</p>
    <p>Type: Task</p>
    <p>Date:1734</p>
    <p>Description: Christening</p>
    <p>Status: +open</p>
    <p>Repository: LDS Library</p>
    <p>Last action: 8 May 2024</p>
    <p><strong>Ann Hill</strong></p>
    <p>Title: Ann Hill</p>
    <p>Type: Task</p>
    <p>Date: 1799</p>
    <p>Description: Family</p>
    <p>Status: +ToDo</p>
    <p>Repository: LDS Library</p>
    
    修改后目标HTML片段:
    <h1>George Stewart</h1>
    <p>Title: George Stewart</p>
    <p>Type: Task</p>
    <p>Date:1734</p>
    <p>Description: Christening</p>
    <p>Status: +open</p>
    <p>Repository: LDS Library</p>
    <p>Last action: 8 May 2024</p>
    <h1>Ann Hill</h1>
    <p>Title: Ann Hill</p>
    <p>Type: Task</p>
    <p>Date: 1799</p>
    <p>Description: Family</p>
    <p>Status: +ToDo</p>
    <p>Repository: LDS Library</p>
    
  • 第二步:按<h1>标签拆分HTML为分块文件
    执行命令:
    pandoc -t chunkedhtml --split-level=1 -o RN_File inputfile.html
    

问题

尝试用Pandoc Lua过滤器实现标题自动转换+合并两步操作,但测试的代码均无效:

  • 错误代码1(仅转换Strong为SmallCaps,不符合需求):
    function Strong(elem)
      return pandoc.SmallCaps(elem.content)
    end
    
  • 错误代码2(语法错误,无法匹配Para+Strong组合):
    function Para+Strong(elem)
      return pandoc.Header(1)
    end
    

解决方案

正确的Lua过滤器代码

创建一个convert-strong-to-h1.lua文件,内容如下:

function Para(para)
    -- 检查段落是否仅包含一个Strong元素,无其他多余内容
    if #para.content == 1 and para.content[1].t == "Strong" then
        -- 将Strong内容提取并转换为H1标题
        return pandoc.Header(1, para.content[1].content)
    end
    -- 不符合条件的段落保持原样返回
    return para
end

一步式执行命令

直接通过过滤器从RTF生成分块HTML,无需中间文件:

pandoc -f rtf -t chunkedhtml --split-level=1 --lua-filter=convert-strong-to-h1.lua -o RN_File inputfile.rtf

代码说明

  • 遍历所有段落(Para元素),判断其内容是否仅包含一个Strong节点
  • 符合条件的段落会被替换为一级标题(Header(1)),对应HTML的<h1>标签
  • 不符合条件的段落(包含其他内容的段落)保持原有结构不变

内容的提问来源于stack exchange,提问作者Packwood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:06:14