2014-07-01 76 views
0

我使用以下代碼從特定位置獲取PDF中的數據。我想在該位置顯示粗體文本。在itextpdf中應用位置提取策略後,我們可以使用文本提取策略嗎?

Rectangle rect = new Rectangle(0,0,250,250); 
RenderFilter filter = new RegiontextRenderFilter(rect); 
fontBasedTextExtractionStrategy strategy = new fontBasedTextExtractionStrategy(); 
strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), filter); //Throws Error. 

要下手,創建一個名爲fontBasedTextExtractionStrategy而不是文本簡單TextExtractionStrategy幫助新的方法?類似下面的東西

​​

但是又如何正確調用它?

回答

1

請看看ParseCustom的例子。在這個例子中,我們創建一個自定義RenderFilter(不是TextExtractionStrategy):

class FontRenderFilter extends RenderFilter { 
    public boolean allowText(TextRenderInfo renderInfo) { 
     String font = renderInfo.getFont().getPostscriptFontName(); 
     return font.endsWith("Bold") || font.endsWith("Oblique"); 
    } 
} 

,以便只有文本其中的PostScript字體名稱以粗體或斜結束這段文字會過濾所有文本。

這是你如何使用此過濾器:

public void parse(String filename) throws IOException { 
    PdfReader reader = new PdfReader(filename); 
    Rectangle rect = new Rectangle(36, 750, 559, 806); 
    RenderFilter regionFilter = new RegionTextRenderFilter(rect); 
    FontRenderFilter fontFilter = new FontRenderFilter(); 
    TextExtractionStrategy strategy = new FilteredTextRenderListener(
      new LocationTextExtractionStrategy(), regionFilter, fontFilter); 
    System.out.println(PdfTextExtractor.getTextFromPage(reader, 1, strategy)); 
    reader.close(); 
} 

正如你所看到的,我們創建了一個FilteredTextRenderListener採用兩個過濾器的基礎上,字體的RegionTextRenderFilter和我們自制的過濾器。

+0

構造函數FilteredTextRenderListener(LocationTextExtractionStrategy,RenderFilter,ParseCustom.FontRenderFilter)未定義 –

+0

@NavalKishorJha正如你所看到的,這個問題的答案被接受和upvoted。假定它是正確的是安全的。如果它不適用於您,您可能使用的版本太舊(在這種情況下您需要升級)或太近(在這種情況下,需要進行細微的更改)。由於您未能告訴我們您使用的是哪個版本,因此沒有人可以幫助您。 –

+0

我有itext5.5.9版本,你能告訴我們上面你使用的api的itext版本嗎? –