ITextPdf PdfWriter.getPageNumber()返回一个额外的页码
查看我所在组织内的许多Java代码示例、internet上的示例以及iTextPdf中的示例,有一种常见的模式,即从返回的页数中减去1,例如: numberOfPages=writer.getPageNumber()-1;//写入程序为PdfWriter类型 看起来iTextPdf考虑了下一个页面,不管它是否存在。这对我来说没有多大意义,但它确实有效ITextPdf PdfWriter.getPageNumber()返回一个额外的页码,pdf,itext,Pdf,Itext,查看我所在组织内的许多Java代码示例、internet上的示例以及iTextPdf中的示例,有一种常见的模式,即从返回的页数中减去1,例如: numberOfPages=writer.getPageNumber()-1;//写入程序为PdfWriter类型 看起来iTextPdf考虑了下一个页面,不管它是否存在。这对我来说没有多大意义,但它确实有效 getPageNumber()确实会持续地将页数增加1吗? 我能得到更多关于这一点的见解吗?(我们正在使用iText 5.5.6) 发生这种情
- getPageNumber()确实会持续地将页数增加1吗?
- 我能得到更多关于这一点的见解吗?(我们正在使用iText 5.5.6)
发生这种情况时的上下文是在页面事件的
onCloseDocument()
方法中使用getPageNumber()
以获取总页数。在这种情况下,返回的值超过数字1。此答案仅适用于iText 5;iText 7使用了完全不同的方法
- 在iText 5中关闭文档时,iText始终调用
方法来完成文档中的最后一页。newPage()
方法也会初始化一个新页面,但由于关闭文档后无法添加任何内容,该新页面将为空,并且永远不会显示在文档中(因为空页面会被忽略)。在初始化将永远不完全存在的新页面期间,页面计数将增加1newPage()
- 在iText 5中关闭文档时,
方法是最后调用的方法之一。它是在使用onCloseDocument()
方法之后调用的,这也意味着:在页码增加1之后newPage()
onCloseDocument()
方法中使用getPageNumber()
方法时,需要减去一页
这种奇怪的行为只有一个原因:iText是有机增长的,PDF创建过程(“5步”)早于页面事件。在最初设计iText时,我们没有考虑添加页面事件。页面事件被固定在原始设计上,这会产生一些后果,比如您在问题中提到的“问题”
正如我们在JavaOne谈话“Oops,我们破坏了我们的API”中所解释的那样,我们已经决定在很长一段时间内不破坏API,即使破坏API会带来更多的优雅和更少的怪癖,就像您提到的那样。对于iText 7,我们决定从头重写iText(打破所有向后兼容性),这样这种奇怪的现象就不再存在了。这个答案只适用于iText 5;iText 7使用了完全不同的方法
- 在iText 5中关闭文档时,iText始终调用
方法来完成文档中的最后一页。newPage()
方法也会初始化一个新页面,但由于关闭文档后无法添加任何内容,该新页面将为空,并且永远不会显示在文档中(因为空页面会被忽略)。在初始化将永远不完全存在的新页面期间,页面计数将增加1newPage()
- 在iText 5中关闭文档时,
方法是最后调用的方法之一。它是在使用onCloseDocument()
方法之后调用的,这也意味着:在页码增加1之后newPage()
onCloseDocument()
方法中使用getPageNumber()
方法时,需要减去一页
这种奇怪的行为只有一个原因:iText是有机增长的,PDF创建过程(“5步”)早于页面事件。在最初设计iText时,我们没有考虑添加页面事件。页面事件被固定在原始设计上,这会产生一些后果,比如您在问题中提到的“问题”
正如我们在JavaOne谈话“Oops,我们破坏了我们的API”中所解释的那样,我们已经决定在很长一段时间内不破坏API,即使破坏API会带来更多的优雅和更少的怪癖,就像您提到的那样。对于iText 7,我们决定从头重写iText(打破所有向后兼容性),这样这种奇怪的现象就不再存在了。这取决于上下文。没有这样的背景,就无法提供答案。谢谢你的回答,布鲁诺。上下文是代码重写onCloseDocument()以获得总页数,然后我们发现响应超过了该数字1。在这种情况下,我可以(也将)回答这个问题。这取决于上下文。没有这样的背景,就无法提供答案。谢谢你的回答,布鲁诺。上下文是代码重写onCloseDocument()以获得总页数,然后我们发现响应超出了该数字1。在这种情况下,我可以(也将)回答这个问题。