精华内容
下载资源
问答
  • freemarker生成word模板
    2020-09-01 16:52:09

    需求:
    给文书统一生成一个搞头文件,文件内容基本是一样的。
    用freemarker生成docx文档
    一、生成一个docx结尾的word模板,然后把文档的后缀docx改成zip,zip里会有生成很多文件。如下图:
    在这里插入图片描述
    然后打开word文件夹,如下图:
    在这里插入图片描述
    把document.xml拿出来,把后缀xml改成ftl,然后把里面的内容(在线格式化xml)格式化一下,把一些可变的参数做成变量。
    二、在resources文件夹下创建wordTemplates文件夹,里面放刚才的zip和改名的gtwj.ftl文件。
    三、替换word模板类:

    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.*;
    import java.util.Map;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;
    import java.util.zip.ZipOutputStream;
    
    public class ZipUtils {
    
        private static final Logger logger = LoggerFactory.getLogger(ZipUtils.class);
        /**
         * 替换document , header1
         *
         * @param zipInputStream  zip文件的zip输入流
         * @param zipOutputStream 输出的zip输出流
         * @param bodyOs        要替换的 word内容流
         */
        public static void replaceItem(ZipInputStream zipInputStream, ZipOutputStream zipOutputStream,
                                       ByteArrayOutputStream bodyOs) {
    
            String bodyname = "word/document.xml";
            //
            if (null == zipInputStream || null == zipOutputStream || null == bodyOs ) {
                return;
            }
            ZipEntry entryIn;
            try {
                while ((entryIn = zipInputStream.getNextEntry()) != null) {
                    String entryName = entryIn.getName();
                    ZipEntry entryOut = new ZipEntry(entryName);
                    // 只使用 name
                    zipOutputStream.putNextEntry(entryOut);
                    if (entryName.equals(bodyname)) {
                        // 使用替换流 替换word内容
                        byte[] buf = bodyOs.toByteArray();
                        zipOutputStream.write(buf,0,buf.length);
                    }
                    else {
                        // 缓冲区
                        byte[] buf = new byte[8 * 1024];
                        int len;
                        // 输出普通Zip流
                        while ((len = (zipInputStream.read(buf))) > 0) {
                            zipOutputStream.write(buf, 0, len);
                        }
                    }
                    // 关闭此 entry
                    zipOutputStream.closeEntry();
    
                }
            } catch (IOException e) {
                logger.error("zip文件的zip输入流失败:", e);
            } finally {
                close(bodyOs);
                close(zipInputStream);
                close(zipOutputStream);
            }
        }
        /**
         * 包装输入流
         */
        public static ZipInputStream wrapZipInputStream(InputStream inputStream) {
            ZipInputStream zipInputStream = new ZipInputStream(inputStream);
            return zipInputStream;
        }
    
        /**
         * 包装输出流
         */
        public static ZipOutputStream wrapZipOutputStream(OutputStream outputStream) {
            ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream);
            return zipOutputStream;
        }
    
        private static void close(InputStream inputStream) {
            if (null != inputStream) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    logger.error("关闭流失败:", e);
                }
            }
        }
    
        private static void close(OutputStream outputStream) {
            if (null != outputStream) {
                try {
                    outputStream.flush();
                    outputStream.close();
                } catch (IOException e) {
                    logger.error("关闭流失败:", e);
                }
            }
        }
    
        /**
         * 获取绝对路径
         * @return
         */
        public static String systemUrl(){
            if(System.getProperties().getProperty("os.name").toUpperCase().indexOf("WINDOWS") != -1){
                return "D:";
            }
            return "/temp";
        }
    
        public static  void wordAndDoc(Map<String, Object> dataMap,ByteArrayOutputStream byteArrayOutputStream) throws IOException {
            //word body
            String bodyName = "gtwjtest.ftl";
            ByteArrayOutputStream bodyOs =  writeFile(bodyName,dataMap);
            ZipInputStream zipInputStream = ZipUtils.wrapZipInputStream(ZipUtils.class.getResourceAsStream("/wordTemplates/gtwj.zip"));
            ZipOutputStream zipOutputStream = ZipUtils.wrapZipOutputStream(byteArrayOutputStream);
            ZipUtils.replaceItem(zipInputStream, zipOutputStream, bodyOs);
    
        }
    
        public static  void word(Map<String, Object> dataMap,ByteArrayOutputStream byteArrayOutputStream) throws IOException {
            //word body
            String bodyName = "gtwj.ftl";
            ByteArrayOutputStream bodyOs =  writeFile(bodyName,dataMap);
            ZipInputStream zipInputStream = ZipUtils.wrapZipInputStream(ZipUtils.class.getResourceAsStream("/wordTemplates/gtwj.zip"));
            ZipOutputStream zipOutputStream = ZipUtils.wrapZipOutputStream(byteArrayOutputStream);
            ZipUtils.replaceItem(zipInputStream, zipOutputStream, bodyOs);
    
        }
        public static  String wordFile(Map<String, Object> dataMap,String docxUrl) throws IOException {
            String bodyName = "gtwj.ftl";
            ByteArrayOutputStream bodyOs =  writeFile(bodyName,dataMap);
            ZipInputStream zipInputStream = ZipUtils.wrapZipInputStream(ZipUtils.class.getResourceAsStream("/wordTemplates/gtwj.zip")); //D:\zip\月度用电报告.zip
            ZipOutputStream zipOutputStream = ZipUtils.wrapZipOutputStream(new FileOutputStream(new File(docxUrl)));
            ZipUtils.replaceItem(zipInputStream, zipOutputStream, bodyOs);
            return docxUrl;
        }
        /**
         * @Description  生成带数据的模板
         * @Param
         */
        public static  ByteArrayOutputStream writeFile(String templateName,Map<String, Object> dataMap) throws IOException {
            Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);
            configuration.setClassForTemplateLoading(ZipUtils.class, "/wordTemplates/");
            Template template = configuration.getTemplate(templateName);
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            Writer out = new BufferedWriter(new OutputStreamWriter(os),10240);
            try {
                template.process(dataMap,out);
            } catch (TemplateException e) {
                logger.error("生成带数据的模板失败:", e);
            }finally {
                if(out != null ){
                    out.close();
                }
            }
            return os;
        }
        /**
         * @Description  生成带数据的模板
         * @Param
         */
        public static  void writeFile(String outFilePath,String templateName,Map<String, Object> dataMap) throws IOException {
            Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);
    
            configuration.setClassForTemplateLoading(ZipUtils.class, "/ftl");
            Template template = configuration.getTemplate(templateName);
            File docFile = new File(outFilePath);
            FileOutputStream fos = new FileOutputStream(docFile);
            Writer out = new BufferedWriter(new OutputStreamWriter(fos),10240);
            try {
                template.process(dataMap,out);
            } catch (TemplateException e) {
                logger.error("生成带数据的模板失败:", e);
            }finally {
                if(out != null ){
                    out.close();
                }
            }
        }
        /**
         * @Description 判断文件夹是否存在 不存在就创建
         * @Param:
         * @return:
         */
        private static void isChartPathExist(String dirPath) {
            File file = new File(dirPath);
            if (!file.exists()) {
                file.mkdirs();
            }
            System.out.println(file.exists()+"  dirPath  "+dirPath);
        }
        public static void main(String[] args) {
    //        String templatePath =ZipUtils.class.getResource("/").getPath()+ "/ftl";
    //        System.out.println(templatePath);
    //        isChartPathExist("D:\\zip\\123");
            File file = new File("F:\\word\\gtwj.pdf");
            if(file.exists()){
                if(file.isFile()){
                    boolean b = file.delete();
                    if (b) {
                        logger.info("成功");
                    }
                }
            }
        }
    }
    

    四、项目里引入jar包如下:

            <dependency>
    			<groupId>org.freemarker</groupId>
    			<artifactId>freemarker</artifactId>
    			<version>2.3.28</version>
    		</dependency>
    

    五、我用到的方法 ZipUtils.word(map, byteArrayOutputStream);其中map就是变量。

    更多相关内容
  • template文件夹下放入xml模板,运行Test.java文件,可以生成word文档
  • freemarker生成word文档模板,配合文档使用,效果更佳。https://blog.csdn.net/xueshuiyy/article/details/86748009
  • 最近在做一个出卷系统,需要通过试卷模板从数据库中抽取题目,然后按照模板的样式生成完整的试卷,包括试卷格式的排版和图片的写入。这是用freemarker模板生成word文档。里面包括完整代码和所需jar包。
  • 老规矩,导入jar包 <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>...编写word模板,选创建一个word文档...

    老规矩,导入jar包

            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.20</version>
            </dependency>

    编写word模板,选创建一个word文档,写入你想导出内容的格式

    另存为文件后缀名为xml(不要直接改文件的后缀),可能有些编译器打开xml文件没有自动格式化,我是用nodepad++,下载的xml tools插件来搞的,找到需要动态赋值的那段代码

    将${p.updateDate} 中间的东西都删除,改为这种,所有需要动态赋值的都需要修改

     保存后修改后缀为ftl,导入你的项目template文件夹中

    package com.xwsz.crm.utils;
    
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileOutputStream;
    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 com.alibaba.fastjson.JSON;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    
    public class WordUtils {
    
    	@SuppressWarnings("unchecked")
        public static void createWord(Map dataMap,String templateName,String filePath,String fileName){
            try {
                //创建配置实例
                Configuration configuration = new Configuration();
    
                //设置编码
                configuration.setDefaultEncoding("UTF-8");
    
                //ftl模板文件
                configuration.setClassForTemplateLoading(WordUtils.class,"/");
    
                //获取模板
                Template template = configuration.getTemplate(templateName);
    
                //输出文件
                File outFile = new File(filePath+File.separator+fileName);
    
                //如果输出目标文件夹不存在,则创建
                if (!outFile.getParentFile().exists()){
                    outFile.getParentFile().mkdirs();
                }
    
                //将模板和数据模型合并生成文件
                Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
    
    
                //生成文件
                template.process(dataMap, out);
    
                //关闭流
                out.flush();
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    	
    	 public static void main(String[] args) {
             /** 用于组装word页面需要的数据 */
            Map<String, Object> dataMap = new HashMap<String, Object>();
            List<Map<String,String>> datas = new ArrayList<>();
            for(int i=0;i<10;i++){
            	Map<String,String> updateInfo = new HashMap<>();
            	updateInfo.put("updateBy","sys");
            	updateInfo.put("updateContent","第"+(i+1)+"次修改");
            	updateInfo.put("updateDate","2022-01-06 15:51:12");
            	updateInfo.put("updateVersion",(i+1)+"");
                datas.add(updateInfo);
            }
            System.err.println(JSON.toJSONString(datas));
            dataMap.put("updateList",datas);
            dataMap.put("title","测试文档标题");
            String filePath = "D:/doc_f/";
            //文件唯一名称
            String fileOnlyName = "生成Word文档.doc";
            /** 生成word  数据包装,模板名,文件生成路径,生成的文件名*/
            createWord(dataMap, "template/wordTest.ftl", filePath, fileOnlyName);
        }
    }
    

    运行后查看目录下对应文件

    项目地址:yanqing/SwaggerToWord (gitee.com)

    展开全文
  • freemarker生成word模板

    2022-03-07 23:46:45
    freemarker生成word模板 一、引入依赖 <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.28</version> </...

    freemarker生成word模板

    一、引入依赖

    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.28</version>
    </dependency>
    

    二、工具类

    注意:Configuration configuration的属性,在某些情况下会出现文件文法打开的情况就是因为参数不对。

    package com.dameng.util;
    
    import com.dameng.domain.FreemarkerDemo;
    import freemarker.cache.ClassTemplateLoader;
    import freemarker.core.XMLOutputFormat;
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateExceptionHandler;
    import freemarker.template.Version;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.util.Locale;
    import java.util.Map;
    
    /**
     * Word文档工具类
     */
    public class WordUtil {
    
        /**
         * 使用FreeMarker自动生成Word文档
         * @param dataMap   生成Word文档所需要的数据
         * @param fileName  生成Word文档的全路径名称
         */
        public static void generateWord(Map<String, Object> dataMap, String fileName) throws Exception {
            // 设置FreeMarker的版本和编码格式
            Configuration configuration = new Configuration(Configuration.VERSION_2_3_27);
            configuration.setEncoding(Locale.getDefault(),"UTF-8");
            configuration.setDefaultEncoding("UTF-8");
            configuration.setOutputFormat(XMLOutputFormat.INSTANCE);
    
            //设置异常处理器 这样的话 即使没有属性也不会出错 如:${list.name}...不会报错
            configuration.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
    //        // 设置FreeMarker生成Word文档所需要的模板的路径
            configuration.setTemplateLoader(new ClassTemplateLoader(FreemarkerDemo.class,"/templates/"));
            // 设置FreeMarker生成Word文档所需要的模板
            ///Template t = configuration.getTemplate("check_freework202202262238.ftl");
            Template t = configuration.getTemplate("check_freework202203061.ftl");
            // 创建一个Word文档的输出流
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(fileName)), "UTF-8"));
            //FreeMarker使用Word模板和数据生成Word文档
    
            t.process(dataMap, out);
            out.flush();
            out.close();
        }
    
    }
    
    

    三、实体类

    package com.dameng.domain;
     
    import freemarker.cache.ClassTemplateLoader;
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;
     
    import java.io.IOException;
    import java.io.StringWriter;
    import java.nio.charset.Charset;
    import java.util.HashMap;
    import java.util.Map;
     
    public class FreemarkerDemo {
     
        public static void main(String[] args) throws IOException, TemplateException {
            /*初始化freemarker模板*/
            Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
            configuration.setDefaultEncoding(Charset.forName("UTF-8").name());
     
            //这里的ClassTemplateLoader 的basePackagePath  如果是 / 开头就是绝对路径。如果不是/ 开头就是相对于
            //com.saoft.fastdemo.gen.FreemarkerDemo.java 这个类的相对路径,会以com.saoft.fastdemo.gen这个目录开始找
            //FileTemplateLoader
            configuration.setTemplateLoader(new ClassTemplateLoader(FreemarkerDemo.class,"/templates/"));
     
            //获取模板
            Template template = configuration.getTemplate("ssm/demo.ftl");
     
            //需要注入的数据
            Map<String, Object> dataMap = new HashMap<>();
            dataMap.put("testKey", "This is key");
     
            //输出位置 这里用字符串输出,如果要输出文件自行替换
            StringWriter writer = new StringWriter();
            template.process(dataMap, writer);
     
            System.out.println(writer.getBuffer());
        }
    }
    

    四、main方法

      
      public static void main(String[] args)  {
                     Map<String, Object> wordDataMap = getWordData(dataSource,systemInfo);
                    //输出概述的信息
                    wordDataMap.put("systemInfo",systemInfo);
                    wordDataMap.put("dbSummaryInfo",dbSummaryInfo);
                    WordUtil.generateWord(wordDataMap,generateFileName);
     }
    
    

    注意:FreemarkerDemo 类有指定模板的位置。

    请添加图片描述

    五、docx文档的选项

    请添加图片描述

    六、踩坑

    6.1 特殊符号

    使用FreeMarker模板生成Word文档时,如果填充的数据字符串中含有特殊字符< 、>、&,那么生成的Word文档是无法打开的。因为这些字符在生成Word文档时被认为是FreeMarker模板的标签,如果这些字符不经过处理就直接用于生成Word文档,使用Word打开生成的文档就会报错,但以xml的方式打开,却会发现所有内容都是完整的,唯独上面三个特殊字符出问题。因此,在处理数据时需要对这三个特殊字符进行处理。

    6.2 换行符

    使用FreeMarker模板生成Word文档时,如果填充的数据字符串过长且当中使用"\n"进行换行,则生成的Word文档中并没有起到换行的作用。需要先将"\n"全部替换成"<w:p></w:p>",然后使用替换后的字符串数据生成Word文档,才能达到换行的效果。

    6.3 内容是xml格式

    使用本文方法生成的Word文档的内容实质上是xml格式的,因此,生成的Word文档即可以使用Word打开,也可以使用xml文档工具打开。如果使用Java程序去读取生成的Word文档的内容,则读出来的也是xml格式的内容。如果想要将内容转换成Word格式,则可以使用Word打开生成的文档然后另存为Word文档格式。

    6.4 后缀是.doc

    使用本文方法生成的Word文档的后缀必须是.doc格式,而不能是.docx格式,否则生成的Word文档无法打开。如果想要将后缀转换成.docx格式,则可以使用Word打开生成的文档然后另存为Word文档格式。

    6.5生成xml打开加密格式

    这是因为notepad++缺少xml的插件,所以打开就是加密的。使用记事本打开或者放到IDEA中打开

    请添加图片描述

    资料

    https://blog.csdn.net/weixin_44516305/article/details/88049964

    https://www.cnblogs.com/zwqh/p/7182953.html

    展开全文
  • freemarker制作word模板

    千次阅读 2019-08-29 17:21:59
    1.调用free marker导出word @Test public void testExportWord() { EnergyVo vo = new EnergyVo(); // 为ftl中所用的属性集合对象 File file = null; String fileName = "test.ftl"; try {...

    1.调用free marker导出word

      @Test
        public void testExportWord() {
            EnergyVo vo = new EnergyVo(); // 为ftl中所用的属性集合对象
            File file = null;
            String fileName = "test.ftl";
            try {
                file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "ftl/"+fileName);
    //            file = new File()getClass().getClassLoader().getResource("lic").getFile();
    //            ResourceFinder.getResourceAsStream("");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            DocumentHandler documentHandler = new DocumentHandler();
            //保存路径
            String savePath = file.getParent()+"\\test4.doc";
            System.out.println("保存路径:"+savePath);
            setAllData(vo);
    //        setImage(file, vo);
            documentHandler.createDoc(file.getParent(), file.getName(), savePath, vo);
            System.out.println("ok");
        }

    1.将test.doc文件另存为test.xml格式的文件。

    2.更改test.xml为test.ftl。文中的路径需要自己更改。

    3.EnergyVo 为ftl中所用的属性的集合对象,如 属性 String head,在test.ftl中可${head}拿到值。

    2.导出word模板

    	/**
    	 *
    	 * @param dir 模板加载路径
    	 * @param tempName 模板名称
    	 * @param savePath  文件保存的路径、文件名
    	 * @param sDate 数据集
    	 */
    	public void createDoc(String dir, String tempName, String savePath, Object sDate) {
    		Template template = null;
    		// 文件保存位置
    		File outFile = new File(savePath);
    
    		Writer out = null;
    		try {
    			// 设置模板加载路径
    			configuration.setDirectoryForTemplateLoading(new File(dir));
    			// 异常控制
    			configuration.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
    			// 加载模板
    			template = configuration.getTemplate(tempName);
    			//生成文件的路径及文件名
    			FileOutputStream fileOutputStream = new FileOutputStream(outFile);
    			OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "utf-8");
    			BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
    			out =bufferedWriter;
    			// 合并模板和数据
    			template.process(sDate, out);
    			out.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}

     

    3.test.ftl文件解析

    1.表格模板的制作

    java类vo中建立属性

     @ApiModelProperty(value = "表1-1")
        private List<Map<String, Object>> listTab1_1;
    
    
    test类中赋值
    List<Map<String, Object>> listTab1_1 = new ArrayList<>();
    		for (int i = 0; i < 4; i++) {
    			Map<String, Object> map = new HashMap<>();
    			map.put("sort", "_");
    			map.put("name", "_");
    			map.put("trans", "_");
    			map.put("sale", "_");
    			listTab1_1.add(map);
    		}
    		vo.setListTab1_1(listTab1_1);
    
    

    ftl文件中映射取值

    注意:属性命名时首字母不能大写。中间不能有特殊符号,如- +,可以为_。

    <w:tr>为表格的行,w:t为一个单元格。<w:t>处为单元格的值,<w:tcw >为单元格长度

    2. 遇到空单元格。需要合并单元格如何做

    可在要遍历此单元格的属性前添加空值判断

    注意:边框问题:常见边框标签

    <w:tcBorders>
    <w:left w:val="single" w:sz="4" w:space="0" w:color="000000"/>
    <w:bottom w:val="single" w:sz="4" w:space="0" w:color="000000"/>
    <w:right w:val="single" w:sz="4" w:space="0" w:color="000000"/>
    </w:tcBorders>
    
    可通过这种方法添加边框
    方法2.在<w:tcW w:w="1506" w:type="dxa"/>下面可添加此标签
    <w:vMerge w:val="restart"/>为有值单元格所有的标签
    <w:vMerge/>为空值单元格的标签
    

    3.如何插入图片

    根据<v:imagedata r:id="rId8" o:title="1521623111(1)"/> 此处的id值搜索。找到target属性值media/image2.png。搜索此值。找到一段64位编码的符号。在<pkg:binaryData>中。删除这些符号。使用vo中的属性值代替

    <pkg:part pkg:name="/word/media/image2.png" pkg:contentType="image/png" pkg:compression="store">
       <pkg:binaryData> ${image4_1} </pkg:binaryData>
    </pkg:part>
    String imagepath = file.getParent() + "/image4_1.png";// 图片的路径
    
    
    
    private static String getImageStr(String imagepath) {
    		InputStream in = null;
    		byte[] data = null;
    		try {
    			in = new FileInputStream(imagepath);
    			data = new byte[in.available()];
    			in.read(data);
    			in.close();
    			BASE64Encoder encoder = new BASE64Encoder();
    			return encoder.encode(data);
    		} catch (IOException e) {
    			System.out.println(e.getMessage());
    		}
    		return null;
    	}

    将经过此方法的返回值赋值给vo类中的属性

    vo.setImage4_1(getImageStr(imagepath));

    到此。图片就可以在模板中显示

    以上内容为初次使用freemaker的心得,以后遇到更多问题会持续更新。

     

    展开全文
  • freemarker模板导出word循环图片表格详细教程 内含源码和详细教程,分不同格式的模版 亲测,详细案例,详细教程在使用必看里面。
  • freemarker 导出word表格

    2017-07-27 16:16:22
    word编好格式,另存为xml文件,修改变量,修改成.ftl模版,然后赛数据导出。
  • 简单的实现了java使用freemarker模板技术导出word的简单功能,不喜勿喷,网上很多的不详细
  • template文件夹下放入xml模板, 运行Test.java文件, 可以生成word文档
  • java中freemarker实现对word的操作java中freemarker实现对word的操作
  • 通过对freemarker在Java web项目中的测试,进行生成word文档测试,将图片插入到模板并生成word文档包含图片成功。
  • import freemarker.template.*; import org.springframework.stereotype.Controller; import javax.servlet.http.HttpServletRequest; import java.io.*; import java.util.HashMap; import java.util.Map; @Cont...
  • 创建模板docx并取出document.xml5.2.用winrar打开test_template.docx,取出word/document.xml5.3.准备工作完毕,上代码了,这个类是把内容填充到xml5.4.这个类是把填充完毕的xml转成docx5.5.main方法调用6 推荐一个...
  • 答:需要长成一个word文档,其中格式有模板文件 首先word文档中需要动态生成的文字字段通通换成${name}的格式,其中name对应 java中的字段,图片等本篇不涉及哈,百度一下也很多就是格式不同 接着另存为.xml格式 ...
  • Java通过FreeMarker.jar模板生成word文档 原理:通过word的另存为xml文件,将xml文件转成freemarker模板文件,然后通过freemarker.jar将数据填充至模板,然后生成doc文件
  • 通过freemarker,实现word模板中占位符的赋值以及赋值后的word文档生成。通过jfreechart生成柱状图和饼图,并在word文档中显示。
  • java通过freemarker模板导出word含图片,希望对你有用,本代码只支持doc格式,如果不满足你的需求,请担待着点!谢谢您能给予好评,非常感谢。
  • Java实现freemarker生成word模板

    千次阅读 2017-06-29 15:15:31
     本文要介绍的就是如何生成模板,并将从源文件截取的内容填充到模板文件(即生成目标文件)的过程,读取源文件内容的方法请阅读博主另一篇文章《Java实现poi方式读取word文件内容》。 1.准备工作  jar包----------...
  • 使用freemarker模板生成word文档

    千次阅读 2019-02-19 11:07:41
    如下图,先准备好一个(office2003)word文档当做模板。文档中图片、姓名、性别和生日已经使用占位符代替,生成过程中将会根据实际情况进行替换。 然后将word文档另存为“Word XML文档” 使用xml编辑器打开...
  • freemarker生成word模版文档及list便利数据(二) 在项目中使用它完成的功能是按照固定的模板将数据导出到Word。比如台账。在完成后将处理过程按照台账的要求导出,有时程序中需要实现生成标准Word文档,要求能够...
  • 使用Itextpdf组件通过freemarker模板技术生成好html内容并导出word文件,提供下载。
  • java使用freemarker生成word
  • Spring Boot 系列教程 freemarker导出word下载
  • freeMarker导出word两种方式:1、生成xml方式模板并附带图片导出,2、总结生成的html模板可以直接导出word,也可以在页面查看。项目中使用过,拿出来分享
  • Java语言利用POI读取excel文档,利用Freemarker建立word模板(带图片),excel每一行数据生成单个word文档,再利用POI合并成一个word文档(源码); 博客地址:...
  • 文章目录前言一、制作freemarker模板二、修改模板三、后台代码四、结果总结 前言 用户需要预览word的功能,word里面带了很多图片,本文选择生成html格式的word来提供该功能。 一、制作freemarker模板 首先,新建...
  • freemaker导出word模板(对象包含list类型属性)效果预览准备工作导出的实体类.ftl格式的word模板表格绘制 效果预览 这里只展示部分效果,实际根据.ftl模板有所不同。 准备工作 先准备写好的word模板,xml格式保存...
  • 制作模板 1.将word文档制作成以下样式,需要替换的内容放占位符,并按照占位符名字替换数据。表格里,使用RR.XXX的形式的占位符。RR表示当前行对象的名字,XXX相当于对象的属性名。写后台的时候,根据这些名将数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,510
精华内容 2,204
关键字:

freemaker word模板