使用docx4j向word文档添加符号

时间:2014-04-21 20:18:34

标签: symbols docx4j wingdings

我正在尝试使用以下代码将docdings符号添加到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属性。当我从这个链接How to generate RSID attributes correctly in Word .docx files using Apache POI?中读到这些属性时,我发现它们是随机的,只是跟踪文档中的变化所必需的。那么,为什么Microsoft的词会一直期待并给我错误呢?

有任何想法/建议吗?

1 个答案:

答案 0 :(得分:2)

我想知道{doc} 4j中的Sym支持是否符合预期。

我尝试了你的代码并得到了同样的问题,但我必须承认以前没有调查过符号。作为一个实验,我在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);