2012-11-25 129 views
5

我已經完成從PDF中提取文本,但現在我想提取圖像。第一個問題是圖像在每頁文本之間。我想知道的是如何按順序提取圖像,即使文件是每頁2列,以及如何確定圖像放置在文本中的位置。如何在Android上使用iText從PDF文件中提取圖像和文本

這是我嘗試過的一些代碼。

圖像提取:

ExtractImages.java: 
public static final String RESULT = "results/part4/chapter15/Img%s.%s"; 
public void extractImages(String filename) 
    throws IOException, DocumentException { 
    PdfReader reader = new PdfReader(filename); 
    PdfReaderContentParser parser = new PdfReaderContentParser(reader); 
    MyImageRenderListener listener = new MyImageRenderListener(RESULT); 
    for (int i = 1; i <= reader.getNumberOfPages(); i++) { 
     parser.processContent(i, listener); 
    } 
} 

MyImageRenderListener: 
public MyImageRenderListener(String path) { 
    this.path = path; 
} 

public void renderImage(ImageRenderInfo renderInfo) { 
    try { 
     String filename; 
     FileOutputStream os; 
     PdfImageObject image = renderInfo.getImage(); 
     if (image == null) return; 
     filename = String.format(path, renderInfo.getRef().getNumber(), image.getFileType()); 
     os = new FileOutputStream(filename); 
     os.write(image.getImageAsBytes()); 
     os.flush(); 
     os.close(); 
    } catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 
} 

代碼過程的PDF並檢查圖像的內容,然後渲染這些圖像到一個圖像文件(.PNG,.JPG,等)。

我在這裏得到的問題是,它不按順序提取圖像。我想要圖像的順序,所以我會知道什麼圖像首先在一頁和最後。我怎麼做?那麼,是否有可能提取圖像而不將其渲染到文件?我的目標是將圖像顯示在我的android應用程序中,而不是將它轉換爲文件。如果我不可能,那麼當用戶使用它時,我會堅持刪除圖像。

我的目的是要EXTRACT(NOT VIEW)來自PDF文件的文本和圖像,並按順序顯示在android應用程序中。

+0

正如前面對其他問題的迴應所述,人們在PDF中查看元素(文本或圖像)的順序並不一定以PDF的形式在手邊呈現。因此,要匹配通用PDF中的解析圖像和解析文本,必須提取兩者的位置,並使用啓發式方法在文本中錨定圖像。即使你只在制定時想要按順序獲取圖像,也必須提取/瞭解結構(多列?),並根據該結構分析圖像位置。而如果在兩欄文檔中有一個圖像在中心? ;) – mkl

回答

0

高層次的方法:

  1. 提取所有文本從文檔,而無需關心閱讀順序
  2. 確定基於字符,二元語法分佈和文本的語言卦
  3. 一次語言是已知的,您知道是使用LTR(從左到右)還是使用RTL閱讀順序
  4. 使用諸如每個字符的邊界框以及語言和字體之類的信息,啓發式地構建文本行(良好的初始度量可能是「連接t」 WO如果他們大致在同一y位置和它們的x-立場之間的差距落在平均+ std_dev範圍內)
  5. 一旦你已經建行,建段(類似於啓發式前)
  6. 現在字符你有段落和文本的語言,你可以按照正確的順序打印段落。

這是我一直在iText研究的東西,它肯定不是一項簡單的任務。

最簡單的解決方案當然是有一個標記的PDF文檔。標記文檔包含關於哪些視覺元素以何種方式屬於一起的信息。或者,簡而言之,您不必關心製作線條和段落,這已經完成並標記出來。

相關問題