2013-02-14 94 views
2

我想從PDF的第一頁創建圖像。我正在使用PDFBox。經過網絡研究,我找到了以下代碼片段:如何在PDF中使用PDFBox創建PDF圖像

public class ExtractImages 
{ 
    public static void main(String[] args) 
    { 
     ExtractImages obj = new ExtractImages(); 
      try 
      { 
       obj.read_pdf(); 
      } 

      catch (IOException ex) 
      { 
       System.out.println("" + ex); 
      } 

    } 

    void read_pdf() throws IOException 
    { 
      PDDocument document = null; 
      try 
      { 
       document = PDDocument.load("H:\\ct1_answer.pdf"); 
      } 
      catch (IOException ex) 
      { 
       System.out.println("" + ex); 
      } 

      List<PDPage>pages = document.getDocumentCatalog().getAllPages(); 
      Iterator iter = pages.iterator(); 

      int i =1; 
      String name = null; 

      while (iter.hasNext()) 
      { 
       PDPage page = (PDPage) iter.next(); 
       PDResources resources = page.getResources(); 
       Map pageImages = resources.getImages(); 
       if (pageImages != null) 
       { 
        Iterator imageIter = pageImages.keySet().iterator(); 
        while (imageIter.hasNext()) { 
         String key = (String) imageIter.next(); 
         PDXObjectImage image = (PDXObjectImage) pageImages.get(key); 
         image.write2file("H:\\image" + i); 
         i ++; 
        } 
       } 
      } 

     } 

} 

在上面的代碼中沒有錯誤。但是這個代碼的輸出沒有任何結果。我期望上面的代碼將產生一系列的圖像,這些圖像將被保存在H驅動器中。但是,從該代碼生成的代碼中沒有圖像。爲什麼?

+0

你做了什麼幻想觀察!我已經理解了這段代碼的每一行。看來代碼應該能夠實現我的目標。但事實是,它不符合我的預期。 – 2013-02-14 06:34:01

+1

您是否試圖提取嵌入在PDF頁面中的圖像並將其寫入磁盤?因爲*那*是這個代碼所做的。 – 2013-02-14 06:37:26

+0

我想輸出PDF的第一頁作爲圖像。 – 2013-02-14 06:39:32

回答

7

,但不嘗試是不禮貌的,這裏是你發佈的代碼做它的主要工作循環內:

PDPage page = (PDPage) iter.next(); 
PDResources resources = page.getResources(); 
Map pageImages = resources.getImages(); 

它越來越每一頁從PDF文件,從頁面獲取資源,並提取嵌入式圖像。然後它將這些寫入磁盤。

如果您要成爲一名稱職的軟件開發人員,您需要能夠研究和閱讀文檔。用Java,這意味着Javadocs。谷歌搜索PDPage(或明確去apache站點)變成Javadoc for PDPage

在該頁面上,您可以找到兩種版本的方法convertToImage(),用於將PDPage轉換爲圖像。問題解決了。

除...

不幸的是,他們返回了基於你問其他問題是一個問題,因爲它不支持在Android平臺上這是你的工作有什麼java.awt.image.BufferedImage

簡而言之,你不能在Android上使用Apache的PDFBox來做你想做的事情。

搜索StackOverflow上你會發現同樣的問題提出不同形式多次,這將導致你到這一點:https://stackoverflow.com/questions/4665957/pdf-parsing-library-for-android/4766335#4766335與下列答案,這將是你的興趣:https://stackoverflow.com/a/4779852/302916

可惜連一說前面提到的答案表示會起作用......不是非常用戶友好的;沒有「如何」或我可以找到的文檔。它也被標記爲「alpha」。這可能不是狡猾的,因爲它需要閱讀和理解他們的代碼才能開始使用它。

+0

但是這種從PDF創建圖片的趨勢是一項非常普遍的任務。這個任務是在一個PDF閱讀庫Aldiko完成的。我必須不惜一切代價去做。 – 2013-02-15 19:03:59

+0

'ImageIO'和'BufferedImage'是您需要將圖像寫入磁盤的全部內容。但是你說這些Java庫在Android上不受支持? O.o – mmcrae 2015-02-13 15:34:28

1

我複製了你的上面的代碼,並將以下庫添加到eclipse中的構建路徑中。這是工作。

Apache PDFBox 1.7.1 libs

Commons Logging 1.1.1 libs

+0

我想從PDF的第一頁創建一個圖像。但是上面的代碼片段從pdf中提取圖像?我能做些什麼來實現我的目標? – 2013-02-14 18:41:42

+0

您只能獲取第一頁而不是以下行:列表 pages = document.getDocumentCatalog()。getAllPages();希望它能回答你的問題。問候。 – GltknBtn 2013-02-19 08:28:20

相關問題