了解libreoffice的朋友都知道,freemarker是用xml生成的word文档,libreoffice打开这些文档会不兼容,会直接显示xml代码或排版差别很大,尤其是文档中包含一些复杂表格的时候
一开始的时候我用office的doc做模板,生成文件后转pdf,版面差别太大,失败~
后来觉得docx解压后全是xml文件应该会完美兼容,索性将docx做模板,解压替换文件后用java.util.zip重新压缩,结果wps打开完美,office打开完美,可是libreoffice直接报错打不开,研究后不得其解,失败~
再后来我发现libreoffice中有个格式fodt,是xml文本文档,果断用它做模板,完美结合,成功~
生成pdf文件步骤:
使用libreoffice新建并做出符合需求的模板保存为fodt格式文件用freemarker语法去写标签做好后保存为ftl格式后台获取数据并生成fodt格式临时文件使用libreoffice转化为pdf文件
pdf预览并打印:
前端使用iframe标签预览
//我是不预览,所以加style<iframe id="downloadFrame" style="display:none;"></iframe>
调用浏览器打印
//将后台返回的pdf文件路径赋给src$('#downloadFrame').attr('src',res.resultValue.PATH);//加载完成后打印$('#downloadFrame').load(function() {console.log('print')var PDF = document.getElementById('downloadFrame');PDF.focus();PDF.contentWindow.print();});
ps:我是要通过libreoffice生成pdf文档才使用的fodt格式文件做freemarker模板的,fodt文件wps和office是不支持的,如果你的需求只是生成word文档则可直接使用offoce word做模板.当然啦,实现方法很多,以上只是其中一种,如有更好的方法请评论告知,谢谢~