2012-10-21 127 views
0

有沒有一種方法可以將一個pdf文件(「example.pdf」)的內容導入到像段落或塊這樣的IText對象中?獲取Itext中的pdf文件內容

我需要使用我正在生成的一個新PDF中的內容(以及其他文本)。

+0

你說你需要使用你正在生成的新PDF中的內容。您的使用動態如何?你是否重複使用完整的頁面?或者你真的需要回流的東西?在前一種情況下,使用一個旨在操縱現有PDF的PdfStamper。 – mkl

回答

1

不,至少不容易。

當iText將塊和段落以及所有這些對象放入PDF中(或其他PDF創建程序中它們各自的對象)時,「從這裏到這些單詞形成一個段落」或「這些單詞形成一個章節」一般都會丟失。相反,所有仍然存在多個定位的字母組。 (好吧,可以有更多的信息,但大多數沒有。)

但是你可以做的是使用類來解析PDF的內容。在iText解析器包中檢索那些定位的字母組,並對它們應用一些啓發式方法來猜測它們中的哪一個形成段落或章節或其他。

0

它的C#代碼,但也應該在Java上工作。關於java 命名空間iTextSharp.text.pdf.parser;它看起來有點不同模式,但它必須是.parse

Rectangle rect = new Rectangle(48.031496063f, 643.307086614f, 198.42519685f + 68.031496063f, 70.866141732f + 663.307086614f); 
RenderFilter f = new RegionTextRenderFilter(rect); 
List<RenderFilter> fi = new List<RenderFilter>(); 
fi.Add(f); 
ITextExtractionStrategy strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), fi.ToArray()); 
//on java it should be: ITextExtractionStrategy strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), f); 
sw.WriteLine(PdfTextExtractor.GetTextFromPage(reader, 1, strategy)); 

對象rect是面積要OCR。所有文本都應該放在txt文件中,與我在pdf上顯示的非常相似。有關iText上OCR的更多信息,請查閱Bruno Lowagie的「iText in action。2nd edition」中的第15.3章。

免責聲明。我和布魯諾無關,只是讀他的書。它回答了我很多關於如何使用iText(夏普)的問題。