【问题标题】:Reading PDF file?阅读PDF文件?
【发布时间】:2012-09-18 06:21:18
【问题描述】:

这将是我第一次阅读 PDF。

我四处寻找,发现了使用 C# 执行此操作的选项并选择使用 iTextSharp。

到目前为止,我已经完成了基本的操作,例如读取文件并毫无问题地获取内容。

PdfReader reader = new PdfReader(iPDF.Text);
for (int x = 2; x <= reader.NumberOfPages; x++)
{
    iResult.Text = Encoding.UTF8.GetString(reader.GetPageContent(x));
    break;
}

如您所见,这是一个非常基本的代码,只是将 PDF 的第二页读入文本文件,但是,我注意到文本文件中有很多代码,我对如何只解析我需要的数据。

我想知道的是,是否有某种模式或其他东西可以帮助我只获得 PDF 的那部分。查看纯文本文件,似乎有些东西定义了行的开始/结束、颜色等。

部分提取数据:

1 0 0 1 0 612 cm 0 0 0 rg
0 0 0 RG
28.35 -28.35 735.3 -526.95 re
W
n
0 0 0.502 sc
28.35 -65.5 735.3 -12.75 re
f
28.35 -543.9 735.3 -11.4 re
f
q
92.25 -28.35 560.9 -18 re
W
n
1 1 1 sc
92.25 -28.35 560.9 -18 re
f
BT
1 0 0 1 95.25 -39.1 Tm
0 0 0 sc
/i 10.75 Tf
(Name - Live) T

注意:以上只是第 2 页的部分初始数据,以指出我之前的意思。

这些数据是制表形式的吗?我怎么才能只提取这些数据?

【问题讨论】:

    标签: c# pdf .net-4.0 itextsharp extract


    【解决方案1】:

    尝试使用PdfTextExtractor,因为它会为您提供更多人类可读的 pdf 文本:

    for (int page = 2; page <= reader.NumberOfPages; page++)
    {
        var strategy = new SimpleTextExtractionStrategy();
        string text = PdfTextExtractor.GetTextFromPage(reader, page, strategy);
        iResult.Text = text;
    }
    

    【讨论】:

    • 嗨,这确实以更简单的方式提供了它,但我认为从原始文本解析它应该比从纯文本更容易不是吗?我的意思是,对于原始数据,它似乎存在一些模式来定义数据的位置我只是想知道是否有一个列表或一些函数可以直接从表中提取......
    • 是的,当然存在模式。此模式在 PDF 规范中进行了描述,并且是 iTextSharp 已经为您实现以解析 PDF 的模式。 PDF 规范就像一个 35MB 的 PDF 文件。你真的想阅读它来理解这种模式吗?如果你这样做,这里是一个链接:wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/…
    • 所以我猜 iTextSharp 没有一个函数已经具有 BT、tf 等模式......即使没有阅读规范,它看起来确实更简单,因为它是像 BT 这样的模式/ET 之间我有一组数据。然后例如Tf (Assess) Tj,括号内的是实际数据,但这就是我要寻找的,如果有解析器,甚至在 iTextSharp 中有一个可以识别它的函数。
    • iTextSharp 已经为您提取了整个文本。如果您想使用原始数据,则由您自己编写解析器。
    • 内容可以在 PDF 中以完全随机的顺序排列。这就是为什么 TextRenderInfo(iTextSharp 中的一个类)为您提供基线坐标和其他指标的原因。请阅读文档:itextpdf.com/book
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2013-05-19
    相关资源
    最近更新 更多