我使用docx4j使用Word模板创建Word文档。模板内容控制文档中的哪些内容由我的Java代码填充文本。问题是我添加到某些控件的格式化没有任何效果。我尝试使用文本内容控件和富文本内容控件进行格式化。实际上,整个文档显示为灰色(包括文档标题中的图像),因此我不确定问题是否特定于docx4j。这是我的代码:
private void replaceTextValue(WordprocessingMLPackage template, String name, String placeholder ) throws Exception{
List<Object> texts = getAllSdtElementFromObject(template.getMainDocumentPart());
for (Object text : texts) {
SdtElement textElement = (SdtElement) text; // SdtElement is an Interface, not a Class
List<Object> cList = textElement.getSdtContent().getContent();
SdtPr pr = textElement.getSdtPr();
List<Object> al = pr.getRPrOrAliasOrLock();
for (Object alias : al) { // go through all SdtPr objects
if ( alias.getClass().toString().contains("org.docx4j.wml.Tag")) {
String CTagVal = ((org.docx4j.wml.Tag) alias).getVal();
if (CTagVal.equalsIgnoreCase(placeholder)) {
ClassFinder finder = new ClassFinder(Text.class);
new TraversalUtil(cList, finder);
// taken from the TraveseFind example
// https://github.com/plutext/docx4j/blob/master/src/samples/docx4j/org/docx4j/samples/TraverseFind.java
for (Object o : finder.results) {
Object o2 = XmlUtils.unwrap(o);
if (o2 instanceof org.docx4j.wml.Text) {
org.docx4j.wml.Text txt = (org.docx4j.wml.Text)o2;
txt.setValue(name);
} else {
System.out.println( XmlUtils.marshaltoString(o, true, true));
}
}
}
}
}
}
}
以下是内容控制的XML
<w:sdt>
<w:sdtPr>
<w:alias w:val="Aufgabengebiet"/>
<w:id w:val="-996718060"/>
<w:placeholder>
<w:docPart w:val="DefaultPlaceholder_1082065158"/>
</w:placeholder>
<w:showingPlcHdr/>
<w:text/>
</w:sdtPr>
<w:sdtContent>
<w:p w:rsidRDefault="00A858B9" w:rsidR="00066661" w:rsidP="00A858B9">
<w:r w:rsidRPr="00FD7E66">
<w:rPr>
<w:rStyle w:val="Platzhaltertext"/>
</w:rPr>
<w:t>Klicken Sie hier, um Text einzugeben.</w:t>
</w:r>
</w:p>
</w:sdtContent>
</w:sdt>
答案 0 :(得分:0)
可以使用run(rPr)格式化格式化纯文本内容控件;见http://webapp.docx4java.org/OnlineDemo/ecma376/WordML/rPr_5.html
例如,Word发出:
<w:sdt>
<w:sdtPr>
<w:rPr>
<w:rStyle w:val="IntenseEmphasis"/>
</w:rPr>
<w:id w:val="-2141179504"/>
<w:placeholder>
<w:docPart w:val="DefaultPlaceholder_1082065158"/>
</w:placeholder>
<w:text/>
</w:sdtPr>
<w:sdtContent>
<w:p >
<w:pPr>
<w:rPr>
<w:rStyle w:val="IntenseEmphasis"/>
</w:rPr>
</w:pPr>
<w:r w:rsidRPr="00B61E2E">
<w:rPr>
<w:rStyle w:val="IntenseEmphasis"/>
</w:rPr>
<w:t>Klicken Sie hier, um Text einzugeben.</w:t>
</w:r>
</w:p>
</w:sdtContent>
</w:sdt>
富文本控件的内容还可以包括pPr格式(在允许包含其上下文的任何P上)。