2013-04-10 128 views
0

我有一个正在通过iText1.4.6生成的动态PDF(是的,我坚持使用这个旧版本)。我遇到了两件事:
1)为所有页面添加水印,而不仅仅是第一页。
2)根据结果集中的结果数量更改页面尺寸。iText:根据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

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

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

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

我想想知道为什么你被这个过时的版本卡住了,为什么你的设计与iText的'标准使用'不同。

+0

忽略你提到的事情的主要原因是因为我不认为它是相关的。表格行的高度在我的代码中设置,以及将单元格添加到表格(并将表格添加到文档中)。我有一个页脚图像,它位于文档的底部,所以当我点击最后一页时,我需要更改页面的尺寸(而不是实际的页面尺寸) – Dan 2013-04-11 15:30:22

+0

好吧,现在您知道您可以更改下一页的大小,但不是当前页面的大小。我希望这有帮助。 – 2013-04-11 15:32:38

+0

setPageSize()更改页面大小,而不是正确的尺寸?有没有办法改变尺寸?类似于它最初的做法Document testScoreReport = new Document(PageSize.A4,50,50,25,230); – Dan 2013-04-11 16:54:32