我正在尝试使用以下代码将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的词会一直期待并给我错误呢?
有任何想法/建议吗?
答案 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);