I am able to add text and paragraphs to word and also replace any merge fields with text but I need to add a new merge field using docx4j to create a word template. How can I do this?
Do I use wordMLPackage.getMainDocumentPart().addTargetPart(targetpart);
to add merge field. If so how?
Edit:
After uploading a sample word to http://webapp.docx4java.org/OnlineDemo/PartsList.html and object representing parts I probably need to add org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart object?
But I still don't understand how to add the Mergefield. I also generated the following xml to find any clue I could get:
<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>
From this I can see that the MergeField is in xml element w:fldSimple so I probably need to create this xml perhaps like this:
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);
Any help would be great Thanks!
Finally solved my own problem! Just adding here so than anyone else stuck in the same problem can find the answer.
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With