跳到正文

DOCX 样式级联导入 ​

语义导入支持有限 Word 样式图:docDefaults、默认段落样式、段落/字符 basedOn 链以及直接格式。标准段落、页眉与页脚采用相同级联;具名图展开后不再保有 Word 样式身份,必须明确接受损失。

java
import com.mirakyux.export4j.adapter.docx.DocxAdapter;
import com.mirakyux.export4j.model.processing.ProcessingPolicy;
import java.nio.file.Files;
import java.nio.file.Path;

var adapter = DocxAdapter.builder()
        .fontFamily("Explicit Sans", new DocxAdapter.FontRoles(
                "", "bold", "italic", "boldItalic"))
        .build();
var prepared = adapter.conversion(Files.readAllBytes(Path.of("source.docx")))
        .policy(ProcessingPolicy.builder()
                .feature("OOXML_MARKUP", ProcessingPolicy.Action.WARN,
                        ProcessingPolicy.Treatment.DEGRADE)
                .build())
        .edit(editor -> editor.replaceText("Old title", "New title"))
        .prepare(adapter.conversionTarget());
prepared.to(Path.of("edited.docx"));

映射值是调用方配置的真实字体角色键;空 regular 代表默认字体组。布局到 PDF 时须在 DocumentEngine 注册对应真实字体,详见统一转换。不扫描系统字体、不合成粗斜体,不猜测 Word 主题字体。

支持边界 ​

字号、颜色、下划线、上下偏移、粗体/斜体/删除线、有限段落几何与编号沿既有语义读取器处理。spacing/ind 逐属性合并;样式 b/i/strike 使用切换规则,直接 on/off 绝对覆盖。outlineLvl 0~5 对应 1~6 级标题。

单一显式 rFonts 字体族可映射到四个物理角色;未知主题、多脚本不同族或未注册族明确报损。所有定义均检查,未使用样式中的非法值也不能忽略。缺失基样式、循环、超过 64 层、重复、错误引用类型和非法格式值均失败。

旧 read(..., STRICT) 拒绝样式图损失;ALLOW_LOSS 的 Diagnostic 中为 styleGraph。统一入口对应 IMPORT/OOXML_MARKUP/DEGRADE。输出得到具体格式,不承诺保存原样式图;需要保留未编辑结构时选择原包编辑。

maxExpandedBytes 同时限制累计格式复制工作和规范化包编码量,前者是保守 XML 工作估计,不是堆内存测量。maxEntryBytes 限制单条目编码;段落/样式数及执行检查点继续生效。

首页/奇偶页区、浮动文本框、更广图片变换及更深内表的语义映射仍按缺口表单独验收。完整例见 DocxStyleImportExample。