生成PDF的前世今生
之前楼主刚刚接手一个老项目,大致内容是负责合同的生成。毕竟说楼主发量还是挺足的,于是在接手之后楼主噼里啪啦一顿操作,修改文件,上传,生成……
呵呵,运气真好,第一驳操作就报错了。
项目中PDF的生成步骤大致是:
- 手动将Word文件转为HTML
- 维护生成后HTML,如写入变量等等
- 上传HTML文件到系统中,之后通过freemarker进行渲染生成PDF合同文件
总的来说,以上步骤并没有任何的毛病,最多就是废手和眼,因为给楼主的报错信息是有一个标签没有闭合!
淦!
几千行HTML文件中一个标签没有闭合,鬼知道哪个标签没有闭合,况且就算标签没有闭合浏览器依然可以渲染出来。
不过这并难不倒我,毕竟我发量贼足。
楼主仗着5.2的视力将HTML文件逐行看了个遍,然而,依然没有看出来究竟是哪个标签没有闭合!!!
再后来,脑袋一拍干脆百度搜一个HTML标签校验器,把文件复制一份上去检测一下,大意了,早知道有这玩意,我还找个P啊。
所以这个故事告诉我们,手动将Word转HTML,生成PDF究竟有多蛋疼!
为了避免因为标签没有闭合而导致freemarker渲染失败,楼主果断换一种生成方式,也就是使用poi-ooxml来生成。
准备工作
撸代码之前先添加一波依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>