我能够将文本和段落添加到单词中,并用文本替换任何合并字段,但我需要使用docx4j添加新的合并字段来创建单词模板.我怎样才能做到这一点?
我是否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>
Run Code Online (Sandbox Code Playgroud)
从这里我可以看到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);
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒谢谢!
终于解决了我自己的问题!只需添加到此处,以便其他遇到相同问题的人都可以找到答案。
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);
Run Code Online (Sandbox Code Playgroud)