Freemarker 导出带多统计图word

  把最近的辛酸稍微记录一下。freemark导出生成word 分两种方式:

 1)直接打开模板另存为一个xml格式,修改需要动态的变更的数据。这种方式适用于内容不多简单的word导出

 2)word本身是一个压缩文件,可以直接改后缀,或者通过压缩软件打开里面是由多个xml文件组成,如下图。使用压缩文件导出的情况一般是带图片、统计图或者文件内容过多的情况。

  如果使用第一种方式导出的word只能按模板生成不会压缩,文件大的时候会打开缓慢。  

    

 

第一生成较为简单,这里就不赘述了,第二种如果只是替换内容包括统计图、图片其实和第一种差距不大,只需要添加一个压缩就可以了。这里主要说说第二种方式中模板里面是一个统计图但是生成文档后是多个统计图的哪些坑。

一、word文件结构

  1.第一层结构如下图

    

  第一层里面只需要注意[Content_Types].xml 这个文件即可,其他文件都是一些基本信息如word主题、账号信息等在生成数据的时候不会改动的。[Content_Types].xml这个文件会声名子文件文件格式,新增的文件也要在这里面声名。

 

 

 

自己生成的文件都需要在这里声名。

2.第一层word下结构如下图

 

1)_rels 文件信息

 

 

document.xml.rels 文件内容

 

 2)charts文件

 

 rels 下的文件容是统计图即chart.xml对应的 colors.xml、style.xml、excel文件(word->embeddings下的excel文件),这里就颜色、样式信息都是一样的也必须重新一份,即每一个chart 就对应一个colors 和style 否则word打开时就会说文件缺失,只能使用wps打开。

生成完的文件内容如下:

这里需要保证chart、colors、style 一一对应,不能因为样式相同就两个chart共用一个样式

 

 

  2)word->document.xml 整个word主体内容

  这里需要注意引用的rId必须保持唯一,否则就是只能wps能打开了。

 

 

总结一下:这次导出word踩坑的主要原因是因为习惯的认为内容一样的根据开发的习惯思维默认为是可以共同引用。但word并不这样,就算文件内容一样也要你重复复制一次。当你用word打开提示你文件缺失时你就看看你是不是统计图什么的样式、颜色文件有共用的

二、代码

这是我生成的一个代码地址:demo

 

posted @ 2021-06-09 16:02  木枝木枝  阅读(435)  评论(0编辑  收藏  举报