java生成PDF表格的一次优化

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

java生成PDF表格的一次优化

最后找到原因是因为发票明细行中的行合并导致效率低下,比如一个合同下有1000条明细数据,那么合同名称这一列就需要合同1000行,这个合并会导致打印效率低下(cell.setColspan(colspan);)方法;

优化思路:因为每个发票只有一个合同我们可以把整个明细行看成一个整体.(思路如下图)

java生成PDF表格的一次优化

这样在调一下样式就可以了

相关的方法:

        float[] widths = {110, 110, 330};
        PdfPTable contractTable = new PdfPTable(widths);//这个表格三列的长度
        contractTable.setTotalWidth(width);//这个属性要加上

        contractTable.setLockedWidth(true);//这个属性要加上

        cellDetail.setPadding(0f);

        cellDetail.setBorderWidth(0f);//去除表格的边框