iText:根据ResultSet更改页面尺寸

时间:2013-04-10 14:56:09

标签: java pdf itext

我有一个通过iText1.4.6生成的动态PDF(是的,我坚持使用这个旧版本)。我遇到两件事有困难:
1)在所有页面上添加水印,而不仅仅是第一页 2)根据resultSet中的结果数量更改页面尺寸。

以下是一些代码:

Document testScoreReport = new Document(PageSize.A4,50,50,25,230);
OutputStream outStream = response.getOutputStream();
PdfWriter writer = null;

writer = PdfWriter.getInstance(testScoreReport, outStream);    
testScoreReport.open(); 

Image watermark = Image.getInstance(CreateTestReport.class.getResource("/resource/img.jpg"));

// Build table
PdfPTable testTable = new PdfPTable(3);
PdfPCell cell1  = new PdfPCell(new Phrase("Test Date", FONT)));
PdfPCell cell2  = new PdfPCell(new Phrase("Test Name", FONT)));
PdfPCell cell3  = new PdfPCell(new Phrase("Test Score", FONT)));
testTable.addCell(cell1);
testTable.addCell(cell2);
testTable.addCell(cell3);

// QUERY HERE
while (resultSet.next()) {

   if (resultTestCount > 20) {
      // NEW PAGE, SO PRINT WATERMARK AND CHANGE PAGE DIMENSIONS OF NEW PAGE
      resultTestCount = 0;
   }

   PdfPCell cell1  = new PdfPCell(new Phrase(testDate, FONT)));
   PdfPCell cell2  = new PdfPCell(new Phrase(testName, FONT)));
   PdfPCell cell3  = new PdfPCell(new Phrase(testScore, FONT)));

   resultTestCount++;
}

testScoreReport.close(); 

我认为这是所有相关的代码。我试图将水印添加到表格单元格中,或者只是将其添加到while循环中,但它似乎忽略了它。页面尺寸 - 我尝试过一些东西,似乎没什么用。

1 个答案:

答案 0 :(得分:1)

对于Watermark示例,请在官方iText网站上查找关键字Watermark。您会发现应使用page events添加水印。

至于更改页面大小,这可能不是一个好主意(我没有任何关于你为什么要在你的情况下这样做的线索),但它可以使用Document.setPageSize()来完成。请注意,在触发下一个newPage()后,页面的大小才会有所不同。

您的代码有些令人困惑:您创建了PdfPTable,但您没有将其添加到文档中。您创建了PdfPCell个对象,但是您没有将它们添加到表中。你说你想根据结果集改变页面大小但是你没有测量行的高度(你将如何定义页面的尺寸?)等等......

我想知道为什么你会坚持使用过时的版本以及为什么你的设计与iText的'标准使用'不同。