项目需求要提供合同打印导出功能,打印是前端同学用js做的,我不关心,导出即提供下载功能,开始思路是直接输出流到pdf,老大给了个方案:freemarker和itext结合使用,另一个同事负责开发,基本做出来了,问题是这个方案有严苛的要求,对字体等方面要求,比如宋体不识别,要替换为SimSun,空白占位符不识别等等问题,有些局限。所以我采用了另一种方案,曲线救国,先输出流到doc文档,这里不会产生任何问题,然后将文档转化为pdf。期间都很顺利,最终提测发现对历史数据有不支持的现象,转化为pdf后标签貌似它未识别,原封不动的给打印了出来,而不是以格式的形式进行渲染。第一个想法对比正常转化的新数据和不能正确转化的老数据,同样都是<p></p>标签形式,实在未发现任何不妥,后怀疑是一些空格等导致的问题,思路是排查标签带来的影响,后经多次排查未发现异常。转移突破点到生成doc中,突然想到是不是应该加上完整的<html></html>闭合标签,因为这一现象总结来看是它不识别标签当做正文来转的,所以要强迫它识别,后尝试成功。我所不能理解的是新数据同样的格式确能正常转化,当然加上标签以后也没有影响,也许是这样更规范吧。附两张对比图:
左侧为转化后pdf效果图,右侧为源码,这是没有<html></html>标签情况
左侧为转化后pdf效果图,右侧为源码,这是有<html></html>标签情况
所以初步判定应该是需要有<html></html>标签情况下能完美支持。路漫漫其修远,继续努力吧。