Ftl 模板生成word文档,内含多张图片

1      将模板需要替换的地方换成${nian}    ${yue}   ${ri}    第一个坑:写了${...}的地方java中必须有值与之对应,否则出错,或者加上!“”

2      将word存成xml,再改扩展名为.ftl

3      将图片的base64字符串改成${im}    

4       多张的时候需要循环     第二坑:</#list>  list是这样结束的

             第三坑:图片名称和SRC需要用变量表示,否则第一张出现多次

 XML中最重要的一段:

<#list images as im><w:pict><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"/><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"/><v:f eqn="sum @0 1 0"/><v:f eqn="sum 0 0 @1"/><v:f eqn="prod @2 1 2"/><v:f eqn="prod @3 21600 pixelWidth"/><v:f eqn="prod @3 21600 pixelHeight"/><v:f eqn="sum @0 0 1"/><v:f eqn="prod @6 1 2"/><v:f eqn="prod @7 21600 pixelWidth"/><v:f eqn="sum @8 21600 0"/><v:f eqn="prod @7 21600 pixelHeight"/><v:f eqn="sum @10 21600 0"/></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/><o:lock v:ext="edit" aspectratio="t"/></v:shapetype><w:binData w:name="${"wordml://0200000"+im_index+1+".jpg"}" xml:space="preserve">${im}
</w:binData><v:shape id="图片 1" o:spid="_x0000_i1025" type="#_x0000_t75" style="width:412.5pt;height:513.75pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="${"wordml://0200000"+im_index+1+".jpg"}" o:title=""/></v:shape></w:pict></#list>

 java的方法:

package util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
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.Locale;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;

/**
 * 利用FTL模板生成doc文档
 * @author Hzz
 *
 */
public class WordTest {  
    
     private Configuration configuration = null;  
      
        public WordTest() {  
            configuration = new Configuration();  
            configuration.setDefaultEncoding("UTF-8");  
        }  
      
        public void createDoc(String dir, String fileName, String savePath,  
                Map<String, Object> sDate) {  
      
            Template t = null;  
            try {  
                // 取模板的路径  
                configuration.setDirectoryForTemplateLoading(new File(dir));  
                // 设置异常处理  
                configuration  
                        .setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);  
                // 设置木板的路径文件  
                t = configuration.getTemplate(fileName);  
      
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            // 输出文档路径及名称  
            File outFile = new File(savePath);  
            Writer out = null;  
            try {  
                //设置编码格式  
                out = new BufferedWriter(new OutputStreamWriter(  
                        new FileOutputStream(outFile), "utf-8"));  
            } catch (Exception e1) {  
                e1.printStackTrace();  
            }  
      
            try {  
                //套用模板,替换变量  
                t.process(sDate, out);  
            } catch (TemplateException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        } 
        
        
        public static void main(String[] args) {
            WordTest wordTest=new WordTest();
            Map<String,Object> map = new HashMap<String, Object>();
//            map.put("nian", "2017");
//            map.put("yue", "12");
//            map.put("ri", "17");
            String base64Str1 = Util.generateImageBase64Str("C:/Users/admin/Workspaces/MyEclipse Professional 2014/bootstrop/src/util/pic1.png");
            String base64Str2 = Util.generateImageBase64Str("C:/Users/admin/Workspaces/MyEclipse Professional 2014/bootstrop/src/util/pic2.jpg");

            List list =  new ArrayList();
            list.add(base64Str1);
            list.add(base64Str2);
            map.put("images", list.toArray());
            wordTest.createDoc("C:/Users/admin/Workspaces/MyEclipse Professional 2014/bootstrop/src/util/", "Doc2.ftl", "H:/doc.doc", map);
        }
 }  

 

转载于:https://www.cnblogs.com/hzzhero/p/8052530.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeMarker 是一个Java模板引擎,它可以帮助我们根据模板生成各种文件,包括 Word 文档。下面是一个简单的示例,演示如何使用 FreeMarker 创建一个根据 FTL 模板生成 Word 文档的过程: 1. 创建一个 FreeMarker 的配置对象,并设置模板文件所在的目录: ``` Configuration cfg = new Configuration(Configuration.VERSION_2_3_30); cfg.setDirectoryForTemplateLoading(new File("path/to/ftl/templates")); ``` 2. 从配置对象中获取模板对象: ``` Template template = cfg.getTemplate("template.ftl"); ``` 3. 准备数据模型,可以是一个 JavaBean、Map 或者其他类型的对象: ``` Map<String, Object> data = new HashMap<>(); data.put("title", "Hello, World!"); data.put("content", "This is a test document created by FreeMarker."); ``` 4. 创建一个 Writer 对象,用于输出生成Word 文档: ``` Writer out = new FileWriter(new File("path/to/output/doc.docx")); ``` 5. 将数据模型和 Writer 对象传递给模板对象,生成 Word 文档: ``` template.process(data, out); ``` 完整的示例代码如下: ``` import freemarker.template.Configuration; import freemarker.template.Template; import java.io.File; import java.io.FileWriter; import java.io.Writer; import java.util.HashMap; import java.util.Map; public class FreeMarkerDemo { public static void main(String[] args) throws Exception { // 创建 Configuration 对象 Configuration cfg = new Configuration(Configuration.VERSION_2_3_30); cfg.setDirectoryForTemplateLoading(new File("path/to/ftl/templates")); // 获取模板对象 Template template = cfg.getTemplate("template.ftl"); // 准备数据模型 Map<String, Object> data = new HashMap<>(); data.put("title", "Hello, World!"); data.put("content", "This is a test document created by FreeMarker."); // 创建输出流 Writer out = new FileWriter(new File("path/to/output/doc.docx")); // 生成 Word 文档 template.process(data, out); // 关闭输出流 out.close(); } } ``` 注意,上面的示例代码中使用模板文件是 FTL 格式,如果要生成 Word 文档,还需要将模板文件转换成 docx 或者其他 Word 文档格式。常见的工具包括 Apache POI 和 Docx4j 等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值