freemarker通过word生成doc模板(xml模板),list的遍历

1、下载freemarker的jar包导入到项目中;

2、通过word文档生成doc模板(xml模板):

新建word文档,编辑内容(变量使用${propertyName}的方式),然后另存为xml文件,xml模板便完成。

另存为xml模板。

如果要使用遍历list的话,需要使用到标签:

<#list listName as entityName>

        存放遍历的内容,遍历的变量值是:${entityName.name}

</#list>

标签存放的位置是如下位置,标签套住<w:p>这个行标签即可,如果你另存的xml没有像我下面的那样排版,你可以使用notepad++的Xml tools插件功能进行自动美化:

需要特别注意的是,上面的entityName一定要是实体对象,不能是map对象

listName则是传入的map中存入的list的key值。(详情看下面实现代码)。

3、代码实现:

package test01;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

public class CreateDoc {
	private Configuration configure = null;
    public CreateDoc(){
           configure= new Configuration();
           configure.setDefaultEncoding("utf-8");
    }
    /**
     * · 根据Doc模板生成word文件
     * @param dataMap Map 需要填入模板的数据
     * @param tempPath 模板文件的路径,例如:/com/temp/
     * @param tempFileName 模板文件的名称,例如:tmplate01.xml
     * @param savePath 保存路径,例如:/home/admin/outWord.doc
     */
    public void createDoc(Map<String, String> dataMap,String tempPath, String tempFileName, String savePath){
           try{
                  //加载需要装填的模板
                  Template template  = null;
                  //加载模板文件
                  configure.setClassForTemplateLoading(this.getClass(),tempPath);
                  //设置对象包装器
                  configure.setObjectWrapper(new DefaultObjectWrapper());
                  //设置异常处理器
                  configure.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
                  //定义Template对象,注意模板类型名字与downloadType要一致
                  template= configure.getTemplate(tempFileName);
                  //输出文档
                  File outFile = new File(savePath);
                  File test = new File("D:\\xmlFile\\test.doc");
                  Writer outtest = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(test),"utf-8")); 
                  System.out.println("文件是否可以写"+outFile.canWrite());
                  
                  Writer out = null;
                  out= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));     
                  
                  template.process(dataMap,out);
                  System.out.println(template.getImports()+",,,"+template.getDateFormat());
                  test.delete();
                  outFile.delete();
           }catch (Exception e) {
                  e.printStackTrace();
           }
    }
    
    public static void main(String[] args) {
    	CreateDoc cd = new CreateDoc();
    	Map mapV = new HashMap<String, Object>();
    	mapV.put("name", "张三");
    	mapV.put("tableName", "信息反馈表");
    	mapV.put("account", "787756885885858");
    	mapV.put("amout", "1000.09");
    	mapV.put("seq_no", "ICP888873838473878384");
    	List list = new ArrayList<Map>();
    	
    	Person p1 = new Person();
    	p1.setId(1);
    	p1.setName("大黄");
    	Person p2 = new Person();
    	p2.setId(2);
    	p2.setName("大老黑");
    	
    	list.add(p1);
    	list.add(p2);
    	
    	mapV.put("listName", list);
    	SimpleDateFormat sdf = new SimpleDateFormat("HHmmss");
        Date date = new Date();
        String formatDate = sdf.format(date);
    	
    	String wordPath = "D:\\xmlFile\\"+formatDate+".doc";
    	cd.createDoc(mapV, "/com/temp/","testXmlMap.xml", wordPath);
    	
	}
}

以上有不明白的可以留言。我看到了的话会回复。

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: 在Java中实现Word模板导出遍历List的过程需要使用特定的工具和技术: 1. 基于JDBC的操作类库,如poi 2. 针对Word操作的类库,如Apache POI 3. 基于XML技术的Word文件渲染库,如Freemarker 4. 使用Java语言的数据结构和算法,如List和循环 5. 熟悉Word文档的XML文件结构和样式定义 在实现Word模板导出遍历List的过程中,首先需要创建一个基于XMLWord模板。通过Java程序读取该模板,获取需要填充的位置。然后,使用数据结构和算法,将List中的数据在对应位置进行填充。 同时,需要掌握Java操作Word的相关技术,如通过Apache POI读取和操作Word文档内容,以及使用FreemarkerXML渲染库进行数据填充。最终,将填充好数据的Word文档进行保存和输出即可。 总之,实现Java操作Word模板导出遍历List需要掌握相关的技术和工具,同时理解Word文档的XML结构和样式定义,才能达到高效、准确地实现填充Word模板的目的。 ### 回答2: 随着信息化的发展,我们越来越多地使用电脑来处理文档,而word作为一个重要的文档处理工具,在我们的生活和工作中占据着非常重要的位置。在实际操作中,我们经常会遇到要将特定数据填充到word模板中的情况。如果每次都手动修改和导出word文档,就显得非常繁琐和耗时,此时我们可以采用使用java来实现批量导出word模板。 要实现这个功能,需要注意以下几点: 1.首先,需要有一个word模板,里面需要提前设置好需要填充内容的位置,区域可以通过设置书签进行标记。 2.然后,需要将需要填充到word模板中的数据存入到list中,list中的每一个元素,对应着word模板中需要填充的内容。 3.使用poi-tl这个jar包,进行word模板的导出。poi-tl可以按照模板文件中的书签对word模板进行填充,从而生成导出的word文档。 4.在进行导出的过程中,需要注意一些细节问题,如导出文件的存储位置,文件名的定义和格式等等。 接下来,我们将使用以下代码来演示如何实现这一功能: ``` //定义导出word文档的存储位置和文件名 String filePath = "D:\\temp\\" + fileName + ".docx"; //开始导出文件 OutputStream os = new FileOutputStream(filePath); //读取模板文件 InputStream is = new FileInputStream("D:\\temp\\template.docx"); //使用poi-tl核心类进行导出操作 XWPFTemplate template = XWPFTemplate.compile(is).render(data); template.write(os); template.close(); os.flush(); os.close(); is.close(); ``` 其中,fileName代表导出文件的文件名,data代表存储数据的list。 最后,总体来说,使用java实现word模板导出遍历list,可以大大提高我们的工作效率,避免手动修改文档的繁琐过程,是一项非常实用的技能。 ### 回答3: 在Java中实现Word模板导出遍历list涉及到如下几个步骤: 1. 准备Word模板 首先需要准备好要导出数据的Word模板文档,可以使用Microsoft Word等办公软件创建。 2. 设计数据结构 为了让程序能够更方便地处理数据,需要设计出适合的数据结构。在此例中,我们可以创建一个Java对象,用于存储每个要填充的文本域,例如: public class WordData { private String field1; private String field2; // getter and setter methods // ... } 3. 填充模板 要填充模板,我们可以使用Apache POI库(一个开源的Java库,用于处理Microsoft Office格式的文档),它提供了对Word文档的访问和操作功能。通过POI,我们可以读入Word模板,扫描它的所有内容,并用Java代码替换其中指定的文本域。 首先需要创建一个XWPFDocument对象,然后通过它获取模板中的所有XWPFParagraph和XWPFTable元素,然后遍历每个元素,查找和替换指定文本域。例如: XWPFDocument doc = new XWPFDocument(new FileInputStream("template.docx")); List<XWPFParagraph> paragraphs = doc.getParagraphs(); List<XWPFTable> tables = doc.getTables(); for (XWPFParagraph paragraph : paragraphs) { String text = paragraph.getText(); if (text.contains("${field1}")) { // 替换文本域 text = text.replace("${field1}", wordData.getField1()); paragraph.getCTP().getPList().get(0).setRArray(0, new XWPFRun().setText(text)); } } // 遍历表格元素,类似处理段落元素 4. 输出结果 最后,我们需要将填充好的Word文档保存到磁盘上,可以使用XWPFDocument的write()方法将文档写入到OutputStream,然后保存到文件中。例如: doc.write(new FileOutputStream("output.docx")); 这样,我们就可以使用Java实现Word模板导出遍历list了。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值