2015-02-07 3110 views
1

我想使用itext庫從java servlet中返回一個來自pdf文件的頁面(以減小文件大小的下載)。 使用此代碼使用iText從pdf文件中提取一個頁面

 try { 
     PdfReader reader = new PdfReader(input); 
     Document document = new Document(reader.getPageSizeWithRotation(page_number)); 


     PdfSmartCopy copy1 = new PdfSmartCopy(document, response.getOutputStream()); 
     copy1.setFullCompression(); 
     document.open(); 

     copy1.addPage(copy1.getImportedPage(reader, page_i)); 
     copy1.freeReader(reader); 
     reader.close(); 

     document.close(); 

    } catch (DocumentException e) { 
     e.printStackTrace(); 
    } 

此代碼返回的頁面,但文件尺寸較大,有時等於原始文件的大小,即使它只是一個頁面。

+0

也許你有一個大的字體或每個頁面使用的大圖像。在這種情況下,如果在100頁中丟棄99個文件,則無關緊要:該頁面仍然需要字體和圖像,並且PDF文件的大小不會縮小。如果您想獲得更有用的答案,您必須向我們提供有關PDF的性質的更多信息。 – 2015-02-07 12:58:45

+0

該文件的副本位於保管箱[文件鏈接](https://www.dropbox.com/sh/rjkw0uageilbjm0/AAAYRLUk0j0FIk0R3KLYH1Isa/1st%20and%202nd%20Year%20Materials/Anatomy/%D8%AE%D8%A7 %D9%84%D8%AF%20%D9%85%D9%8A%D9%84%D8%A7%D8%AF /%D8%A7%D9%84%D9%85%D9%86%D9% 87%D8%AC%20%D8%A7%D9%84%D9%86%D8%B8%D8%B1%D9%8A?dl = 0),大部分頁面都是論文的圖片。 – Ahmed 2015-02-07 13:47:32

+0

我已經下載了abdomen.pdf。這是一個只包含圖像的PDF。你爲什麼不提取圖像並提供服務?如果您可以提供單獨的圖像,爲什麼還需要單頁PDF? – 2015-02-07 13:58:18

回答

4

我已經下載從你的庫中的單個文件:Abdomen.pdf

然後我用下面的代碼爲「爆發」 PDF:

public static void main(String[] args) throws DocumentException, IOException { 
    PdfReader reader = new PdfReader("resources/Abdomen.pdf"); 
    int n = reader.getNumberOfPages(); 
    reader.close(); 
    String path; 
    PdfStamper stamper; 
    for (int i = 1; i <= n; i++) { 
     reader = new PdfReader("resources/abdomen.pdf"); 
     reader.selectPages(String.valueOf(i)); 
     path = String.format("results/abdomen/p-%s.pdf", i); 
     stamper = new PdfStamper(reader,new FileOutputStream(path)); 
     stamper.close(); 
     reader.close(); 
    } 
} 

要「爆發」是指將拆分單獨的頁面。雖然原文件Abdomen.pdf是72570 KB(約70.8 MB),單獨的頁面要小得多:

enter image description here

我無法重現您所描述的問題。

+0

但對於一些文件,如(簡介2013 .pdf),生成的文件非常大,請參閱此鏈接(http://2-dot-sheet-s0.appspot.com/toimage?name=Introduction%202013.pdf&page=1)生成的文件大小約爲12 MB等於pdf的大小。 – Ahmed 2015-02-07 14:36:20

+0

我不再在我的電腦上,而是在我的手機上。如果你想讓我測試一個特定的文件,你應該這麼說。這會讓你在將來更加精確。 – 2015-02-07 14:51:22

+2

@Ahmed在文件*簡介2013.pdf *你有同樣的問題,在問題中討論[itextsharp:拆分頁面大小等於文件大小](http://stackoverflow.com/questions/15566896/itextsharp-splitted-pages -size-equals-file-size):所有頁面共享一個*​​ Resources **字典,** 4 0 R **。因此,分割複製每個頁面的所有資源。因此,在分割之前,您應該優化PDF以爲每個頁面提供單獨的** Resources **字典,其中只包含實際在該頁面上使用的資源,參見參考資料。我對這個問題的回答。 – mkl 2015-02-09 09:40:15