word 文档导出 (freemaker+jacob)

您所在的位置:网站首页 freemarker生成word文档office打不开 word 文档导出 (freemaker+jacob)

word 文档导出 (freemaker+jacob)

2024-05-15 00:04| 来源: 网络整理| 查看: 265

工作中终于遇到了 需要导出word文旦的需求了。由于以前没有操作过,所以就先百度下了,基本上是:博客园,简书,CDSN,这几大机构的相关帖子比较多,然后花了2周时间 才初步弄懂。

 学习顺序:

第一阶段

1,。首先 是 先了解 java 通过什么方式 来操作word的导出工作。就有了下面这个帖子了:

  java 操作 word 的方法 :https://www.cnblogs.com/lcngu/p/5247179.html  。新手可以先看看了解下。

2. 根据需求:操作word很复杂: 1.有图片(图片数量 动态变化,可能没有),2.有复选框需要展示 【一个文档里有好几个 复选框。框框打钩还是不打勾,不确定】,3.文档样式和模板客户已经给我们提供好了。

因此; 选着了使用freemaker辅助工具来操作,word文档生成和导出。

 整个流程简单来说:

        对于支持低版本的ofifce  word 文档格式 应该是 doc格式的:

                1.先生成模板:就是word文档 先标记好要填充数据的位置,(一般建议用 实体类的属性名 站位 ,可以的话用花括号括起来)。小技巧(对于图片,复选框。这些特别的东西。先不做处理)。

                2. 生成 xml文件:word文档 另存为 xml 格式的--(一定要是word.xml,其他格式的不行,这里选着 word-2003.xml)。低版本要求

                3. 生成ftl文件: 这个没啥说的,freemaker只能能识别它,因此需要这几个步骤1. 把生成好的xml文件,把后缀名改成 ftl 就可以了;2.所有占位符的地方 加上$标志;

                4. 使用freemaker 工具 整合 模板和数据了。

                5. 输出生成好的 word文档。

         参考教程: java使用freemarker生成word文档步骤  带图片   

                             Java之利用FreeMarker导出Word实例      

         对于高版本的ofifce  word 文档格式 是 docx格式的:

              有两种方法:

           1.解压--替换--压缩。好处word是原生的不是xml格式的。

           2. 和上述doc方式一样,只不不过导出xml 选择 word.xml。 后续操作一模一样。

   参考教程 : 

                          第一种方式: JAVA通过模板生成DOCX文档    一般不推荐,除非图片数量固定。

                       第二种方式:1.使用freemarker导出word并动态插入多张图片。

                                            2.使用freemarker导出word文档包含多张图片。

 

对于复选框(打钩和不打勾)的操作:请参考这个文档,非常直观的告诉你怎么操作:freemarker导出word文档中的复选框打钩功能

对于图片操作请参考 上面给的教程。 上面的教程主要是图片的处理。

第一阶段到此结束了,然后开始写代码和编程了。下面给的是数据获取的几个操作方法。数据对象Map .

WordPhotoUtil: 对图片的处理 1 package com.chiyun.peersocialworker.synchroWork.util; 2 3 import com.chiyun.peersocialworker.files.entity.EmplPictureInforEntity; 4 import com.chiyun.peersocialworker.synchroWork.vo.Picther2Vo; 5 import com.chiyun.peersocialworker.synchroWork.vo.PictherVo; 6 import sun.misc.BASE64Encoder; 7 8 import java.io.File; 9 import java.io.FileInputStream; 10 import java.io.IOException; 11 import java.io.InputStream; 12 import java.util.ArrayList; 13 import java.util.HashMap; 14 import java.util.List; 15 import java.util.Map; 16 17 /** 18 * word-图片信息处理-工具类 19 * 20 */ 21 public class WordPhotoUtil { 22 23 24 25 /** 26 * 获得图片的base64码 27 * @param filepash 28 * @return 29 * @throws Exception 30 */ 31 public static String getImageBase(String filepash) throws Exception { 32 if (filepash == null || filepash == "") { 33 return ""; 34 } 35 System.out.println("图片路径"+filepash); 36 File file = new File(filepash); 37 if (!file.exists()) { 38 System.out.println("图片不存在"); 39 return ""; 40 } 41 InputStream in = null; 42 byte[] data = null; 43 try { 44 in = new FileInputStream(file); 45 data = new byte[in.available()]; 46 in.read(data); 47 in.close(); 48 }catch(IOException e){ 49 e.printStackTrace(); 50 } 51 System.out.println("图片大小:"+data.length); 52 BASE64Encoder encoder = new BASE64Encoder(); 53 return encoder.encode(data); 54 } 55 56 57 58 59 /** 60 * 图片信息获取 【肯定是偶数个数】 双图片成对保存 61 * @param images 62 * @return 63 * @throws Exception 64 */ 65 public static List getImage(List images ,int numbers,int photosize )throws Exception{ 66 List pictvoList=new ArrayList(); 67 List List1=new ArrayList(); 68 List List2=new ArrayList(); 69 int i=1; 70 for(EmplPictureInforEntity image:images ) { 71 if( i%2==0){ 72 List2.add(image); 73 }else{ 74 List1.add(image); 75 } 76 i++; 77 } 78 int bb=numbers; 79 for(int j=0;j


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3