2012-07-05 55 views
1

我有一個包含幾個圖像的pdf文檔。提取嵌入在pdf中的圖像名稱

我想檢索這些圖像的名稱。

如何使用iText或pdfbox實現此目的?

我知道ExtractImages從PDF中提取圖像。我覺得這會在某個地方具有獲取圖像名稱的功能。但是,我不知道ExtractImages的用法。

提取PDF名稱的實際問題是使用它來壓縮這些圖像以減小pdf的大小。我的方法是否正確?

回答

0

你可以用pdfbox獲得什麼是圖像及其後綴(類型)的關鍵。您也可以保存該圖像。

String prefix = new File(pdfFilename).getName(); 
    prefix = prefix.substring(0, prefix.indexOf(".pdf")); 

    PDDocument document = null; 

    try 
    { 
     document = PDDocument.loadNonSeq(new(pdfFilename), null); // use non-seq parser is better 

     List<PDPage> pages = document.getDocumentCatalog().getAllPages(); 
     System.out.println(pdfFilename + ": Total pages: " + pages.size()); 
     int p = 0; 
     for (PDPage page : pages) 
     { 
      ++p; 
      PDResources resources = page.getResources(); 
      Map<String, PDXObjectImage> imageResources = resources.getImages(); 
      for (String key : imageResources.keySet()) 
      { 
       PDXObjectImage objectImage = imageResources.get(key); 
       System.out.printf("image key '%s': %d x %d, type %s%n", key, objectImage.getHeight(), objectImage.getWidth(), objectImage.getSuffix()); 

       // write that image 
       String fname = String.format("%s-%04d-%s", prefix, p, key); 
       objectImage.write2file(fname); 
      } 
     } 
    } 
    // put catch here 
    document.close(); 

然而,這不會幫助你,除非你確信所有這些圖像直接轉換爲PDF格式,即不旋轉,平移或縮放。如果您需要這樣做,那麼您可能需要查看PDFBOX src下載中的PrintImageLocations.java示例。