2011-08-24 166 views
1

我需要將我的pdf中的每個頁面從信件調整爲合法大小。這是我到目前爲止的內容iText:成功調整一頁PDF大小,但在pdf文檔中有多個頁面時失敗

public void resize (float x, float y, float scale) throws Exception { 
    PdfReader reader = new PdfReader(pdfIn); 
    Document doc = new Document(PageSize.LEGAL, 0, 0, 0, 0); 
    PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(pdfOut)); 
    doc.open(); 
    PdfContentByte cb = writer.getDirectContent(); 
    for(int i=1; i<=reader.getNumberOfPages(); i++){ 
     PdfImportedPage page = writer.getImportedPage(reader, i); 
     cb.addTemplate(page, scale, 0, 0, scale, x, y); 
    } 
    doc.close(); 
} 

即使調整大小是正確的,輸出pdf只包含1頁。請幫忙嗎?

+1

你不是增加對新調整的文檔的頁面,所以你從原來的加載所有頁面都進入新PDF格式的同一頁面。應該在某處調用'.newPage();'。 –

+0

@Marc B:你可以多給我看看。我看文檔,'PdfImportedPage'沒有構造函數,所以我不知道如何創建一個新頁面。 –

+0

@Marc B:我弄清楚你的意思是:它是'document.newPage()'。噢,如果你可以說'document.newPage()'而不是'.newPage()',你可以節省我兩個小時的搜索時間:D。謝謝你+1 –

回答

4

這是答案。我需要doc.newPage()在迴路中,閱讀我原來的問題Marc B評論獲取更多信息

public void resize (float x, float y, float scale) throws Exception { 
    PdfReader reader = new PdfReader(pdfIn); 
    Document doc = new Document(PageSize.LEGAL, 0, 0, 0, 0); 
    PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(pdfOut)); 
    doc.open(); 
    PdfContentByte cb = writer.getDirectContent(); 
    for(int i=1; i<=reader.getNumberOfPages(); i++){ 
     doc.newPage(); 
     PdfImportedPage page = writer.getImportedPage(reader, i); 
     cb.addTemplate(page, scale, 0, 0, scale, x, y); 
    } 
    doc.close(); 
} 
+0

感謝你 - 我剛剛成功實現了這項技術來調整頁面大小,但有一個後續問題:我以前一直在使用PdfCopy類來複制PDF,但這看起來似乎沒有更多的代碼並可以擴展。 PdfCopy是否在做這種以這種方式創建PDF時被錯過的巧妙操作? – Andy

相關問題