建网站花费,chrome谷歌浏览器,网站建设宣传psd,电子商务网站建设课程总结需求背景#xff0c;需要把ai生成的一些业务数据#xff0c;生成一份pdf报告 需求分析
简单来说#xff0c;就是json生成pdf的方案。
直接生成pdf。适合一些pdf样式简单的场景#xff0c;一般就是纯文本按序渲染#xff0c;或者是纯表格。如果需要一些复杂的排布#x… 需求背景需要把ai生成的一些业务数据生成一份pdf报告 需求分析
简单来说就是json生成pdf的方案。
直接生成pdf。适合一些pdf样式简单的场景一般就是纯文本按序渲染或者是纯表格。如果需要一些复杂的排布比如图片、水印、页眉页脚之类的用pdf直接渲染的话就会复杂很多而且后续有个什么改动都很麻烦。我试了一下初步排除了这个方案。先生成word之后再word转pdf。先说缺点word转pdf需要引入额外的服务会比较重。但事情都是一体两面的是缺点的同时也是优点json生成word的技术和word转pdf的技术都是比较成熟的效果也不错市面上都有很优秀的开源包或者开源系统可以使用。属于一种一劳永逸的方案吧。
方案选择
最后的方案是
json生成word采用poi-tl一款简单好用的word模板渲染工具。大部分的样式都可以在word上提前用占位符的方式写好代码层面只需要做数据填充即可不用在后端代码里做样式渲染这种事情。(当然部分场景也避免不了不可能完全解耦)。基础用法不做赘述官方文档很详细。后面会补一些我自己遇到的小问题。第二步word转pdf。这一步试了几种方案。aspose收费且有水印排除jacob不支持linux排除jodconverteropenOffice效果不错且免费但是openoffice不适合与业务服务部署在一起单独部署的话需要再包一层成本会略大。但好在这个事情有人已经做过了kkviewfile就是市面上基于openoffice而开源的一个pdf预览转换服务。github上也有详细的部署文档不做赘述。
使用过程中的几个小问题
poi-tl种的区块对是一个很好用的原生插件但是如果想在区块对中嵌套一些其他样式比如列表的话直接使用不会生效需要额外指定。
// 比如这里的events是一个事件列表占位符名称NumberingRenderPolicyEva是我自定义的一个列表插件
builder.bind(events, new NumberingRenderPolicyEva()).build();word转pdf的时候有些样式会有偏差首先是因为word和pdf的格式不会是完全兼容的一些隐藏的属性在word中的展示和pdf中完全不一样。大部分属性都是可以在word中设置或者poi中指定的(poi会暴露常见的属性)比如我遇到的一个问题word中设置好指定的行距到了pdf中会失效变成固定的行距明显宽了很多导致页数增加。 试了几个样式发现只有页眉没问题所以确定是预设样式的属性原因。 最后发现是这个属性的问题 当然还有一些隐藏更深的属性可以把word解压出来在xml中对照着看然后修改自己需要的属性即可eg 最后补充一个小建议这种和业务耦合不是很高的技术需求使用cursor会有奇效哦