Java 使用iText 5时出现奇怪的显示问题

Java 使用iText 5时出现奇怪的显示问题,java,itext,Java,Itext,我敢肯定,解决我的问题最简单的答案是你需要更新你的iText版本。然而,我的老板不愿意在从iText 4升级到iText 5后进行更新,正如他所说的那样,他打破了很多废话。所以我使用iText 5.0.1来构建这个PDF 我正在构建一个应用程序,它将读取Excel文件并为我们参加的活动创建徽章。这相当简单,除了最终结果的外观外,一切都按预期进行 我的PDF设置代码如下所示,每个徽章的正面和背面都是双面打印的,每个页面本身应该有6个徽章。当我将相同的徽章复制到每次销售中进行测试时,它看起来很好。但

我敢肯定,解决我的问题最简单的答案是你需要更新你的iText版本。然而,我的老板不愿意在从iText 4升级到iText 5后进行更新,正如他所说的那样,他打破了很多废话。所以我使用iText 5.0.1来构建这个PDF

我正在构建一个应用程序,它将读取Excel文件并为我们参加的活动创建徽章。这相当简单,除了最终结果的外观外,一切都按预期进行

我的PDF设置代码如下所示,每个徽章的正面和背面都是双面打印的,每个页面本身应该有6个徽章。当我将相同的徽章复制到每次销售中进行测试时,它看起来很好。但是,当我使用一组数据时,无论出于何种原因,我的PDF都会被丢弃。它不是每页打印6个徽章,而是有时每页打印6个,有时每页打印3个。例如,我的excel文件有21行数据-需要创建21个徽章。我每页有3套3枚徽章,每页有2套6枚徽章,分别设置为3、6、6、3枚徽章的数量

是否有我遗漏的东西会导致3页6个徽章,然后是一页3个徽章

文档=新文档PageSize.LETTER,MARGIN,MARGIN,MARGIN,MARGIN; PdfWriter writer=PdfWriter.getInstancedocument,新文件OutputStreamFileName; document.open; PdfContentByte cb=writer.getDirectContent; 构建文档文件、徽章正面、徽章背面; 文件关闭; public void buildDocumentDocument文档,ArrayList badgeFronts,ArrayList badgeBacks抛出DocumentException{ float[]frontTableWidths={150f,10f,150f,10f,150f,10f}; float[]backTableWidths={10f,150f,10f,150f,10f,150f}; PdfPTable frontTable=新的PdfPTable6; frontTable.SetWidths FrontTableWidths; frontTable.setWidthPercentage100; PdfPTable backTable=新的PdfPTable6; backTable.setwidths backtablewidths; backTable.setWidthPercentage100; 整数计数=0; forint i=0;i<0.size;i++{ PdfPCell frontCell=新的PdfPCell; frontCell.setFixedHeight260f; frontCell.SetboordColorBaseColor.GRAY; PdfPCell backCell=新的PdfPCell; backCell.setFixedHeight260f; backCell.setboordColorBaseColor.GRAY; ifcount==5{ 计数=0; document.addfrontTable; document.newPage; document.addbackTable; document.newPage; frontTable.deleteBodyRows; backTable.deleteBodyRows; } PdfPTable front=badgeFronts.geti; PdfPTable back=badgeBacks.geti; frontCell.addElementfront; backCell.addElementback; frontTable.addCellfrontCell; frontTable.addCell; backTable.addCell; backTable.addCellbackCell; ifi==1.size-1{ document.addfrontTable; document.newPage; document.addbackTable; document.newPage; } 计数++; } frontTable.completeRow; backTable.completeRow; } 上面是我的代码。我在其他地方创建了主表单元格中的表,如果需要,我可以显示这些表,但是我不认为这是必要的。

ifcount==5{ 计数=0; document.addfrontTable; document.newPage; document.addbackTable; document.newPage; frontTable.deleteBodyRows; backTable.deleteBodyRows; } 这段代码就是问题所在。首先,这还为时过早。它需要放在count++之后;陈述第二,在移动块后,不是检查count==5,而是检查count==6。这一变化一发生,它就完全按照预期开始工作


这几乎意味着,在转向堆栈溢出之前,我并不擅长用尽所有选项…

如果您已经切换到版本5,那么至少尝试使用最新的版本5.5。X@Lonzak相信我,我愿意。然而,我的老板的心态是,如果它没有坏,就不要修理它!有了iText,发生这种情况的可能性很小,但是为什么要从java世界中不存在的iText4迁移到iText5.0.1呢?5.0是AGPL授权的,这意味着您必须购买商业许可证,或者必须开放整个项目的源代码。我很好奇:我在哪里能找到它?但是,如果您已经获得了许可,那么您就有了商业支持,并且当您更新到5.5.X时,其他任何东西是否停止运行都无关紧要。如果你不付钱,那么迁移到openPDF会更有意义……那么他们真的授权了吗?然后联系iText corp.的商业支持。如果没有,请共享AGPL的链接
许可源代码。然后社区可以帮助…这里的iText软件员工@朗扎克是对的。我们可以帮助你。请向您的上司索要我们支持Jira的登录帐户。假设您的老板购买了商业许可证,包括支持合同。如果不是,将项目放在GitHub这样的站点上可能是遵守AGPL这一部分的最简单方法。