2012-10-22 62 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