2014-06-15 62 views
0

我无法阅读带有页眉和页脚的PDF,但在您的身体中有2列。iTextSharp - 用2列阅读PDF

我已经有列的宽度和高度的标题,但我需要的代码来阅读列的页面。

任何人都可以提供一段代码来读取PDF列吗?

谢谢

回答

1

这是很难达到你想要什么,如果你不知道列的位置,但我认为你有它的坐标,因为你说“我已经有列的宽度和高度”。在这种情况下,你的问题是不是从张贴在StackOverflow上这个的其他问题不同:iTextSharp read from specific position

假设rect是一个列的位置相对应的Rectangle,那么你就需要这样的代码:

RenderFilter[] filter = {new RegionTextRenderFilter(rect)}; 
ITextExtractionStrategy strategy = new FilteredTextRenderListener(
    new LocationTextExtractionStrategy(), filter); 
String single_column = PdfTextExtractor.GetTextFromPage(reader, i, strategy)); 

现在,您只有一列中的文字。您需要为网页上的每一列重复此操作。

额外的评论:虽然使用RegionTextRenderFilter大多数情况下会工作得很好,少数病例(其中列通过简单地插入的行额外的空格字符创建)可能需要分割文本块来处理提前。这可以通过例如通过使用来自this answerTextRenderInfoSplitter并将FilteredTextRenderListener包装在其中。

+1

虽然在大多数情况下使用'RegionTextRenderFilter'可以很好地工作,但少数情况下(通过在行中插入额外的空格字符来创建列)可能需要将文本块提前处理。这可以通过例如通过使用[本答案](http://stackoverflow.com/questions/21000256/pdf-reading-highlighed-text-highlight-annotations-using-c-sharp/21023311#21023311)中的'TextRenderInfoSplitter'并包装' FilteredTextRenderListener'在里面。 – mkl

+0

好评,mkl,我会将您的评论添加到答案中。 –

+0

感谢Bruno, 但是这种策略正在改变\ n的双打\ n文本。 而且我需要在SimpleTextExtractionStrategy()中完成的\ n的两倍\ n 您知道如何使用矩形而不会丢失双精度\ n吗? –