2013-04-10 81 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