如何使用itextsharp从pdf获取特定列值

时间:2018-04-05 05:42:22

标签: c# pdf itext

我有一张PDF,其中数据显示在表格中。在此表中,我有多个列,但我希望将特定列值作为列表。这可能吗?

这是我的代码:

PdfReader pdfReader = new PdfReader(fileName);
for (int page = 1; page <= pdfReader.NumberOfPages; page++)
{
    ITextExtractionStrategy strategy = new LocationTextExtractionStrategy();
    string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
    currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
    text.Append(currentText);
}
pdfReader.Close();
return text.ToString();

使用此代码,我获得了PDF的所有文本,但我想要一个特定的数据列。列名是&#34;日期&#34;。

1 个答案:

答案 0 :(得分:0)

这比你想象的要复杂得多。 PDF文档不(始终)包含结构信息。它只有观察者需要呈现文档的指令。

想象一下:

  

转到50,50   使用字体Helvetica Bold
  绘制字符'H'的字形   转到56,50   绘制字符'e'的字形

这些说明甚至不需要按逻辑阅读顺序出现。 因此,根据指令确定构成逻辑表的内容非常困难。

可能的方法(如果你的表包含足够的行):

  • 使用IEventListener通知PathRenderInfo和TextRenderInfo
  • 将PathRenderInfo收集到行
  • 如果(并且仅当)它们以90°角度交叉
  • ,则将线聚集成簇
  • 确定此类线群的行数和列数
  • 假设某事是一个表,如果(并且仅当)它包含足够的行和列并且其中包含一些文本