First, you get a copy of the Word template you normally need, using the letters that you can use to distinguish the data that you want to fill with the program, such as XXXXX.
The second step is to convert the Word template into an XML file (Word can be saved as XML), open with tools such as Editorplus, note the character encoding, word character encoding is utf-8, so open is best not to change, first look at the encoding is correct (incorrect change character encoding ), then format the XML file, format the aspect of reading (formatted, there are many online formatting tools), and then look for the tags you just left in Word, replace them with the freemarker tag, whose syntax is basically consistent with the struts syntax.
Like what:
1, pass an object to Freemarker, extract the property value of an object can be written as ${report.planname}.
2. Pass a collection to Freemarker and iterate over a collection to:
< #list table1_tr as table1_td> // traversal start
${TABLE1_TD} // output value
</#list > // Traversal End
3, if traversing a two-dimensional collection
4. Define a variable < #assignx =0/>
5. Determine if the object is empty
<#ifQA. Question?? >
${qa.question}
</#if >
The third step outputs word, such as:
Example
The Word template is like this
The XML is this:
Then we use Freemarker Markup language to process dynamic data, from simple to difficult, we first replace the data outside the list data, each tag is not the same line. Such as:
Next we replace the list data with the < #list > tag to replace
Write < #list at the beginning of list data >
End Write </#list >
Replace middle section
Then Save:
The save file for my XML is called Test2.xml. I'll use this for a while.
Then start writing the program:
First you have to have these, is freemarker open source package, Baidu One, import is good,
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
Thefreemarker class:
Import Java.io.bufferedwriter;import java.io.file;import java.io.fileoutputstream;import java.io.IOException; Import Java.io.outputstreamwriter;import java.io.writer;import Java.util.arraylist;import Java.util.HashMap;import Java.util.list;import Java.util.map;import Freemarker.template.configuration;import freemarker.template.Template; Import Freemarker.template.templateexception;public class Thefreemarker {private configuration configuration = null; Public Thefreemarker () {configuration = new configuration (); Configuration.setdefaultencoding ("UTF-8");} public void Createdoc () {//data file to be filled in modeled map DataMap = new HashMap (); GetData (DATAMAP);//Set Modeled device method and path// Here our template is placed under the Src.model package configuration.setclassfortemplateloading (This.getclass (), "model"); Template T = null;try {t = configuration.gettemplate ("Test2.xml");//load Test2.xml template} catch (IOException e) {e.printstacktr Ace ();} Output document path and name file OutFile = new file ("D:/outfiledoc.doc"); Writer out = null;try {out = new BufferedWriter (New OutputStreamWriter (New FileOutputStream (OutFile), "Utf-8");} catch (Exception E1) {e1.printstacktrace ();} try {t.process (DataMap, Out),} catch (Templateexception e) {e.printstacktrace ();} catch (IOException e) { E.printstacktrace ();}} /** * Note that the data stored in the DATAMAP key value should correspond to the parameters in the template * @param dataMap */private void GetData (Map dataMap) {datamap.put ("name", "small new and Small white"); /name XML marked ${name}datamap.put ("Tdate", "2011-12-02");//Time XML marked ${tdate}datamap.put ("Address", "Haidian District, Beijing");//Time The markup in XML is ${address}list table2 = new ArrayList (), for (int i = 0; i < 5; i++) {Table2 t = new Table2 (); T.setapplyno ("BBBB Bbbb-bb "), T.setcustname (" Xiao Xin "), T.setloandate (" 2012-12-12 "); T.setregion (" 999-999 "); Table2.add (t);} Datamap.put ("Table2", table2);}
Table2 is:
public class Table2 {private String applyno;private string custname;private string loandate;private string Region;public S Tring Getapplyno () {return applyno;} public void Setapplyno (String applyno) {this.applyno = Applyno;} Public String Getcustname () {return custname;} public void Setcustname (String custname) {this.custname = CustName;} Public String Getloandate () {return loandate;} public void Setloandate (String loandate) {this.loandate = loandate;} Public String getregion () {return region;} public void Setregion (String region) {this.region = region;}
Test class:
public class Pptest {public static void main (string[] args) {thefreemarker tf=new thefreemarker (); Tf.createdoc ();}}
Execution Result:
Description
Public Utility Call Center's Quality report template production, need to ensure that the name of each data unchanged, if you want to change the need to modify the background code and the corresponding entity class
Entity class: Com.haiyisoft.vo.entity.cc.repo.QCBriefReport
Com.haiyisoft.vo.entity.cc.repo.QCBriefReportQATable
Related articles freemarker export word--to automatically change the number of table data rows
Freemarker export word--with fusioncharts to create a diagram, text word
Using Freemarker to generate word usage (Java)