我可以向 word 添加文本和段落,也可以用文本替换任何合并字段,但我需要使用 docx4j 添加新的合并字段来创建 word 模板。我该怎么做?
我是否使用 wordMLPackage.getMainDocumentPart().addTargetPart(targetpart);
添加合并字段。如果是怎么办?
编辑:
将示例单词上传到 http://webapp.docx4java.org/OnlineDemo/PartsList.html 后和代表部分的对象我可能需要添加 org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart 对象?
但是我还是不明白如何添加Mergefield。我还生成了以下 xml 以查找我可以获得的任何线索:
<w:document xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:ns21="urn:schemas-microsoft-com:office:powerpoint" xmlns:ns23="http://schemas.microsoft.com/office/2006/coverPageProps" xmlns:dsp="http://schemas.microsoft.com/office/drawing/2008/diagram" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:odx="http://opendope.org/xpaths" xmlns:odgm="http://opendope.org/SmartArt/DataHierarchy" xmlns:dgm="http://schemas.openxmlformats.org/drawingml/2006/diagram" xmlns:ns17="urn:schemas-microsoft-com:office:excel" xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:odi="http://opendope.org/components" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:ns32="http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture" xmlns:ns30="http://schemas.openxmlformats.org/officeDocument/2006/bibliography" xmlns:ns12="http://schemas.openxmlformats.org/drawingml/2006/chartDrawing" xmlns:ns31="http://schemas.openxmlformats.org/drawingml/2006/compatibility" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:odq="http://opendope.org/questions" xmlns:ns8="http://schemas.openxmlformats.org/schemaLibrary/2006/main" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" xmlns:odc="http://opendope.org/conditions" xmlns:oda="http://opendope.org/answers">
<w:body>
<w:p w:rsidR="00F66879" w:rsidP="00E80FA3" w:rsidRDefault="003B0B3A">
<w:r>
<w:t>Dear</w:t>
</w:r>
<w:r w:rsidR="00E80FA3">
<w:t xml:space="preserve"> </w:t>
</w:r>
<w:fldSimple w:instr=" MERGEFIELD lastName \* MERGEFORMAT ">
<w:r w:rsidR="005C0283">
<w:rPr>
<w:noProof/>
</w:rPr>
<w:t>«lastName»</w:t>
</w:r>
</w:fldSimple>
<w:r w:rsidR="00E80FA3">
<w:t>,</w:t>
</w:r>
</w:p>
<w:p w:rsidR="00532EBF" w:rsidP="00E80FA3" w:rsidRDefault="00532EBF">
<w:r>
<w:t>On the Insert tab, the galleries include items that are designed to coordinate with the overall look of your document. You can use these galleries to insert tables, headers, footers, lists, cover pages, and other document building blocks. When you create pictures, charts, or diagrams, they also coordinate with your current document look.</w:t>
</w:r>
</w:p>
<w:p w:rsidR="00532EBF" w:rsidP="00E80FA3" w:rsidRDefault="00532EBF">
<w:r>
<w:t>You can easily change the formatting of selected text in the document text by choosing a look for the selected text from the Quick Styles gallery on the Home tab. You can also format text directly by using the other controls on the Home tab. Most controls offer a choice of using the look from the current theme or using a format that you specify directly.
</w:t>
</w:r>
</w:p>
<w:p w:rsidR="001E4C13" w:rsidP="00E80FA3" w:rsidRDefault="001E4C13">
<w:r>
<w:t>Thank you</w:t>
</w:r>
</w:p>
<w:p w:rsidR="001E4C13" w:rsidP="00E80FA3" w:rsidRDefault="001E00E0">
<w:r>
<w:t>Sincerely,</w:t>
</w:r>
</w:p>
<w:p w:rsidRPr="00F66879" w:rsidR="001E00E0" w:rsidP="00E80FA3" w:rsidRDefault="00C3747B">
<w:fldSimple w:instr=" MERGEFIELD sender \* MERGEFORMAT ">
<w:r w:rsidR="001E00E0">
<w:rPr>
<w:noProof/>
</w:rPr>
<w:t>«sender»</w:t>
</w:r>
</w:fldSimple>
</w:p>
<w:p w:rsidR="00E80FA3" w:rsidRDefault="00E80FA3"/>
<w:sectPr w:rsidR="00E80FA3" w:rsidSect="00961253">
<w:pgSz w:w="12240" w:h="15840"/>
<w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="720" w:footer="720" w:gutter="0"/>
<w:cols w:space="720"/>
<w:docGrid w:linePitch="360"/>
</w:sectPr>
</w:body>
</w:document>
从这里我可以看到 MergeField 在 xml 元素 w:fldSimple 中,所以我可能需要像这样创建这个 xml:
CTSimpleField ctSimple = factory.createCTSimpleField();
ctSimple.setInstr(" MERGEFIELD lastname \\* MERGEFORMAT");
RPr RPr = factory.createRPr();
RPr.setNoProof(new BooleanDefaultTrue());
Text t = factory.createText();
t.setValue("fieldValue");
R run = factory.createR();
run.getContent().add(RPr);
run.getContent().add(t);
JAXBElement<CTSimpleField> fldSimple = factory
.createPFldSimple(ctSimple);
任何帮助都将非常感谢!
最佳答案
终于解决了自己的问题!只需在此处添加,这样其他陷入相同问题的人就可以找到答案。
ObjectFactory factory = Context.getWmlObjectFactory();
CTSimpleField ctSimple = factory.createCTSimpleField();
ctSimple.setInstr(" MergeField fieldValue \\* MERGEFORMAT ");
RPr RPr = factory.createRPr();
RPr.setNoProof(new BooleanDefaultTrue());
Text t = factory.createText();
t.setValue("fieldValue");
R run = factory.createR();
run.getRunContent().add(RPr);
run.getRunContent().add(t);
ctSimple.getParagraphContent().add(run);
JAXBElement<CTSimpleField> fldSimple = factory
.createPFldSimple(ctSimple);
// P
P para = factory.createP();
para.getParagraphContent().add(fldSimple);
Body body = factory.createBody();
body.getEGBlockLevelElts().add(para);
wordMLPackage.getMainDocumentPart().addObject(body);
关于java - 如何使用 docx4j 在 word 中添加合并字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21107327/