2012-10-22 106 views
-1

我有2列格式的pdf。我能夠解析它爲簡單的文本,但這些pdf也有圖像之間。因此,我的文本輸出混亂起來,爲PDF中間有圖像的特定頁面。帶圖像的IText Pdf閱讀器

例如,考慮一個2列頁面格式

圖片文本2

圖片圖片

圖片文本3

文本1圖片

Text4 

輸出是 文本4文本3文本2文本1而不是文字1 Text2 Text3 Text4

任何解決方案,以閱讀正確的順序文本?

我使用下面的代碼

public void parsePdf(String pdf, String txt) throws IOException { 

    PdfReader reader = new PdfReader(pdf); 
    PdfReaderContentParser parser = new PdfReaderContentParser(reader); 
    PrintWriter out = new PrintWriter(new FileOutputStream(txt)); 
    TextExtractionStrategy strategy; 
    for (int i = 76; i <= reader.getNumberOfPages(); i++) { 
     strategy = parser.processContent(i, new SimpleTextExtractionStrategy()); 
     out.println(strategy.getResultantText()); 
    } 
    out.flush(); 
    out.close(); 
} 

回答

0

您正在使用SimpleTextExtractionStrategy。該策略假設頁面內容中的字母組已經按照合理的順序排列。嘗試使用LocationTextExtractionStrategy來排序這些字母組。

雖然你似乎更喜歡有趣的訂單。根據你的問題,你想獲得文本1文本2文本3文本4

Image Text2 
Image Image 
Image Text3 
Text1 Image 
     Text4 

的LocationTextExtractionStrategy將責令從上到下爲主,不過,其次纔是左到右。因此,你會得到Text2 Text3 Text1 Text4。根據您的要求,您應該複製LocationTextExtractionStrategy並將其更改爲按您需要的方式排列文本片段。

如果需要的順序是由於被意味着被解釋爲兩列是,雖然內容,你可能希望通過過濾策略分別輸入解析列:

Rectangle rect = new Rectangle(x1, y1, x2, y2); 
RenderFilter filter = new RegionTextRenderFilter(rect); 
TextExtractionStrategy strategy = new FilteredTextRenderListener(
    new LocationTextExtractionStrategy(), filter); 

賦予的iText在行動中,第二版例子ExtractPageContentArea

此致,Michael