1. itext官网电子书地址:https://kb.itextpdf.com/itext/ebooks
2. 背景:根据某些数据创建一个pdf。 格式类似于下面的图片。 首先是文档标题;
下一行为汇总行,汇总行中还有一个"当前页数 总页数";第三行为表格头;后面为表格内容。
下图中圈出来的部分,要求每一页都有,同时不固定每页显示行数,能显示多少显示多少,占满一页为止(真实数据不像演示这么少,偶尔会很多)。因为不知道每页多少行数,所以不能事先计算出总页数。
3.解决方案:
1)每一页都要显示的文档标题、汇总行、表格头
将文档标题、汇总行和表格头、表格内容当成同一个表格处理。文档标题、汇总行表格头都做为标题行。具体格式采用cell的rowspan和colspan处理。
itext支持重复标题行,使用itext提供的table.addHeaderCell()方法即可。
参考连接:https://kb.itextpdf.com/itext/chapter-1-introducing-basic-building-blocks
2) 当前页数 总页数: 我们希望在第一页添加文档的总页数,然而,在我们写下第一页的那一刻,我们事先并不知道总页数,只有在pdf绘制完成之后才能知道总页数。itext提供了一个占位符placeholder和表单 XObject 。
表单 XObject 是存储在页面内容流外部的单独流中的 PDF 语法片段。它可以从不同的页面引用。如果我们创建一个表单 XObject 作为占位符,并将其添加到多个页面,则我们只需更新一次,并且该更改将反映在每个页面上。我们可以更新表单 XObject 的内容,只要它没有被写入outputstream
参考连接:https://kb.itextpdf.com/itext/chapter-7-handling-events-setting-viewer-preferenc
示例PageXofY 。