在优化一个pdf的发票打印的时候如果发票的发票明细超过1000行的时候就会变得很慢.需要20分钟才能把数据加载出来.之后就开始查询耗时的原因,在打印了每个方法的执行时间之后,发现在打印方法执行的时候sql取数据的时候很快,那么就是itext的转换PDF的时候导致很慢.

最后找到原因是因为发票明细行中的行合并导致效率低下,比如一个合同下有1000条明细数据,那么合同名称这一列就需要合同1000行,这个合并会导致打印效率低下(cell.setColspan(colspan);)方法;
优化思路:因为每个发票只有一个合同我们可以把整个明细行看成一个整体.(思路如下图)

这样在调一下样式就可以了
相关的方法:
float[] widths = {110, 110, 330};
PdfPTable contractTable = new PdfPTable(widths);//这个表格三列的长度
contractTable.setTotalWidth(width);//这个属性要加上
contractTable.setLockedWidth(true);//这个属性要加上
cellDetail.setPadding(0f);
cellDetail.setBorderWidth(0f);//去除表格的边框
本文针对PDF发票打印过程中遇到的效率问题进行了详细分析。当发票明细超过1000行时,打印耗时显著增加。通过排查发现itext在处理大量行合并时效率低下。提出了一种将合同明细作为整体处理的优化方案,并调整了样式设置,有效提高了打印速度。

3774

被折叠的 条评论
为什么被折叠?



