请看一下AddExtraTable示例。它是为回答“
如何继续第二页上的字段输出
”问题而编写的AddExtraPage示例的简化形式。
该问题几乎与您的问题完全相同,唯一的不同是您的要求更容易实现。
我简化了这样的代码:
public void manipulatePdf(String src, String dest) throws documentException, IOException { PdfReader reader = new PdfReader(src); Rectangle pagesize = reader.getPageSize(1); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); AcroFields form = stamper.getAcroFields(); form.setField("Name", "Jennifer"); form.setField("Company", "iText's next customer"); form.setField("Country", "No Man's Land"); PdfPTable table = new PdfPTable(2); table.addCell("#"); table.addCell("description"); table.setHeaderRows(1); table.setWidths(new int[]{ 1, 15 }); for (int i = 1; i <= 150; i++) { table.addCell(String.valueOf(i)); table.addCell("test " + i); } ColumnText column = new ColumnText(stamper.getOverContent(1)); Rectangle rectPage1 = new Rectangle(36, 36, 559, 540); column.setSimpleColumn(rectPage1); column.addElement(table); int pagecount = 1; Rectangle rectPage2 = new Rectangle(36, 36, 559, 806); int status = column.go(); while (ColumnText.hasMoreText(status)) { status = triggerNewPage(stamper, pagesize, column, rectPage2, ++pagecount); } stamper.setFormFlattening(true); stamper.close(); reader.close();}public int triggerNewPage(PdfStamper stamper, Rectangle pagesize, ColumnText column, Rectangle rect, int pagecount) throws documentException { stamper.insertPage(pagecount, pagesize); PdfContentByte canvas = stamper.getOverContent(pagecount); column.setCanvas(canvas); column.setSimpleColumn(rect); return column.go();}如您所见,主要区别在于:
- 我们
rectPage1
为第一页和第二页以及rectPage2
随后的所有页面创建一个。那是因为我们不需要第一页上的整页。 - 我们不需要加载
PdfimportedPage
,而是只添加与首页大小相同的空白页。
可能的改进:我对
Rectangle实例进行了硬编码。不用说,这
rect1Page取决于原始表单的位置。我也进行了硬编码
rect2Page。如果我有更多时间,我将
rect2Page根据该
pagesize值进行计算。
请参阅官方常见问题解答的以下问题和答案:
- 如何在表格上添加表格(并可能插入新页面)?
- 如何在第二页上继续字段输出?



