1

我正在尝试使用以下代码将 Wingdings 符号添加到 docx。

P symp = factory.createP();
R symr = factory.createR();
Sym sym = factory.createRSym();
sym.setFont("Wingdings");
sym.setChar("FOFC");
symr.getContent().add(sym);         
symp.getContent().add(symr);
mainPart.getContent().add(symp);

打开文档时出现无效内容错误。当我尝试将符号直接添加到单词 docx、解压缩 docx 并查看 document.xml 时,我看到该段落具有 rsidR 和 rsidDefault 属性。当我从这个链接中了解这些属性时,如何使用 Apache POI 在 Word .docx 文件中正确生成 RSID 属性?,我看到它们是随机的,只需要跟踪文档中的更改。那么,为什么 Microsoft Word 一直期待它并给我错误?

有什么想法/建议吗?

4

1 回答 1

3

我想知道Symdocx4j 是否以您期望的方式提供支持。

我尝试了您的代码并遇到了同样的问题,但我必须承认以前没有研究过符号。作为一个实验,我在 Word 2010 中使用相关的“插入”菜单命令添加了一个符号,然后检查了生成的 OpenXML——它与插入Sym元素时预期的标记完全不同。

您是否尝试过直接插入文本而不是操纵符号?例如,这将插入一个刻度字符(不确定这是否是您所追求的):

        P p = factory.createP();
        R r = factory.createR();
        RPr rpr = factory.createRPr();
        Text text = factory.createText();

        RFonts rfonts = factory.createRFonts();
        rfonts.setAscii("Wingdings");
        rfonts.setCs("Wingdings");
        rfonts.setHAnsi("Wingdings");
        rpr.setRFonts(rfonts);
        r.setRPr(rpr);

        text.setValue("\uF0FC");
        r.getContent().add(text);
        p.getContent().add(r);
        mainPart.getContent().add(p);
于 2014-04-22T14:41:15.197 回答