aardio 文档

Markdown 原生导出 DOCX

string.markdown.toDocx 将 Markdown 转为可编辑的 DOCX。转换链为 Markdown → HTML → Word 内容模型 → DOCX:string.html.toDocx 仅解释 Markdown 所需的有限 HTML 子集,fsys.openXml.docx.builder 生成 WordprocessingML,公共 fsys.openXml.writer 负责 ZIP 和安全保存。生成时不调用 Word、MSXML、COM 或 .NET,不经过 RTF。

需要 fsys.openXml 0.13.0+、配套 zlib,以及支持 string.html(html,true) 的 HTML/XML 库。无需自行预编码空白;原有调用接口和默认选项保持。

快速使用

import string.markdown.toDocx;

var md = "# 文档标题

Hello **bold** world。

- [x] 已完成
- [ ] 待处理
";

var path,err,report = string.markdown.toDocx.save("/output.docx",md);
if(!path){
    print(err);
    return;
}

for i,w in report.warnings print(w.message);
raw.explore(path,"/select");

默认不覆盖已有文件。确实需要替换时,给选项添加 overwrite=true。先生成临时文件,再在目标目录替换;失败不会先清空旧文件。

两个入口

成功时 err 为 null。失败时第一个返回值为 null;失败早期可能没有 report。report.warnings 是 {code;message} 数组;还包含 paragraphCount/tableCount/listCount 计数(列表计数对应生成的编号定义,不等于列表项数)。

两个输出入口都透传公共 writer 的写入限额。默认每部件 16 MiB、总写入 128 MiB;可用 maxPartBytes/maxWriteBytes 显式调整,超限返回错误。二进制入口会读取并删除一个临时 ZIP;save 直接在目标目录提交,不再创建临时 XML 部件目录。

常用选项

import string.markdown.toDocx;

var options = {
    font="Microsoft YaHei";
    monoFont="Consolas";
    symbolFont="Segoe UI Symbol";
    fontSize=11;
    codeFontSize=10;
    lineSpacing=1.15;
    codeLineSpacing=1.15;
    pageWidth=11906;
    pageHeight=16838;
    landscape=false;
    margins={left=1440;right=1440;top=1440;bottom=1440};
    wideTable="stack";
    tableMinColumnWidth=720;
    checkboxStyle="unicode";
    overwrite=false;
    title="文档标题";
    author="作者";
    colors={inlineCodeBackground=0xEFF1F3};
};

var path,err,report=string.markdown.toDocx.save("/configured.docx","# 配置示例",options);
if(!path) print(err);

第一版支持范围

保留内容的宽表策略

默认 wideTable="stack":列数过多、页面放不下最小列宽,或遇到合并单元格时,按行/列展开为段落,并返回 table-stacked 警告。

wideTable="wrap":优先保留表格并收窄列宽、允许单元格换行。若连基本的字符宽度和内边距都无法容纳,仍会展开;不会产生零宽/负宽单元格。可以配合横向页面。

尚未实现

上游 Markdown 行为

本库使用现有 string.markdown 解析器,不改写其语法。当前解析器会将代码块 TAB 转为四空格;3. item 生成的 <ol> 未保留 start,因此输出编号从 1 开始。如必须指定起始编号,可调用 string.html.toDocx 并使用 <ol start="3"> / <li value="7">。

范例与 HTML 入口

完整可运行范例:~/examples/Text/Markdown/md2docx.aardio。

HTML 子集入口详见 string.html.toDocx。DOCX 库与现有 RTF 库独立,原来的调用不受影响。

实际兼容性验证覆盖本机 Windows 11 + Microsoft Word 16;不把它等同于所有版本 Word、WPS、LibreOffice 或 macOS 的测试结论。

Markdown 格式