阅读目录
添加图片自定义载入模板1. 用word写一个需要导出的word模板,然后存为xml格式。
2. 将xml中需要动态修改内容的地方,换成freemarker的标识符,例如:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 < w:p wsp:rsidR = "00D02906" wsp:rsidRDefault = "00FA4C58" wsp:rsidP = "00FA4C58" > < w:pPr > < w:jc w:val = "center" /> < w:rPr > < w:rFonts w:hint = "fareast" /> </ w:rPr > </ w:pPr > < w:r > < w:t >${year}</ w:t > </ w:r > < w:r > < w:rPr > < wx:font wx:val = "宋体" /> </ w:rPr > < w:t >年度工作报告</ w:t > </ w:r >< span style = "line-height:22px;font-family:'Courier New';" class = "Apple-style-span" >< span style = "color:#0000ff;" ></</ span >< span style = "color:#800000;" >w:p</ span >< span style = "color:#0000ff;" >></ span ></ span > 3. 用代码生成: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 import freemarker.template.Configuration; import freemarker.template.Template; import java.io.*; import java.util.HashMap; import java.util.Map; /** * @Class name: CreateDoc * <p/> * Short description on the purpose of the program. * @author : youfeng * @modified : 8/29/11 */ public class CreateDoc { private Configuration configuration = null ; public CreateDoc() { configuration = new Configuration(); configuration.setDefaultEncoding( "utf-8" ); } public void create() throws Exception { Map<String, Object> map = new HashMap<String, Object>(); map.put( "date" , "2011" ); map.put( "modifyDate" , "2011/8/29" ); map.put( "modifyUser" , "Zhu You Feng" ); configuration.setClassForTemplateLoading( this .getClass(), "/docTemplate/" ); Template t = configuration.getTemplate( "doc1.ftl" ); File outFile = new File( "D:/outFile.doc" ); Writer out = new BufferedWriter( new OutputStreamWriter( new FileOutputStream(outFile))); t.process(map, out); } public static void main(String[] args) throws Exception { new CreateDoc().create(); } }如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开xml文档,可以看到如下的一片base64编码后的代码:
1 < w:binData w:name ="wordml://03000001.png" xml:space ="preserve" > iVBORw0…(很省略很省略)…CC </ w:binData >只要将base64的代码替换成例如:${image},如下:
1 < w:binData w:name ="wordml://03000001.png" xml:space ="preserve" > ${image} </ w:binData >这里要注意“>${image}<”这尖括号中间不能加任何其他的诸如空格,tab,换行等符号。
然后用代码生成:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 import freemarker.template.Configuration; import freemarker.template.Template; import sun.misc.BASE64Encoder; import java.io.*; import java.util.HashMap; import java.util.Map; /** * @Class name: CreateDoc * @author: youfeng * @modified: 8/29/11 */ public class CreateDocWithImage { private Configuration configuration = null ; public CreateDocWithImage() { configuration = new Configuration(); configuration.setDefaultEncoding( "utf-8" ); } public void create() throws Exception { Map<String, Object> map = new HashMap<String, Object>(); map.put( "year" , "2011" ); map.put( "person" , "Zhu You Feng" ); map.put( "image" , getImageStr()); configuration.setClassForTemplateLoading( this .getClass(), "/docTemplate/" ); Template t = configuration.getTemplate( "doc2.ftl" ); File outFile = new File( "D:/outFile.doc" ); Writer out = new BufferedWriter( new OutputStreamWriter( new FileOutputStream(outFile))); t.process(map, out); } private String getImageStr() { String imgFile = "d:/test.jpg" ; InputStream in = null ; byte [] data = null ; try { in = new FileInputStream(imgFile); data = new byte [in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(data); } public static void main(String[] args) throws Exception { new CreateDocWithImage().create(); } } 回到顶部