2012-09-18 225 views
0

这将是我第一次阅读PDF。阅读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的第2页到一个文本文件,但是,我已经看到了很多代码到文本文件,我有点如何仅解析我所需要的数据就会丢失。

我想知道,如果存在一个模式或东西,这将帮我把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页指出我以前的意思。

数据是列表中的某种东西,我怎么能只提取?

回答

2

尝试使用PdfTextExtractor因为它会给你更多的人类可读的文本出来的PDF:

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

嗨,的确是不给它一个更简单的方法,但我认为从原始解析它应该那么从简单文本中就不那么容易了?我的意思是,在原始的情况下,它似乎存在一些模式,它定义了数据的位置,我只是想知道是否有列表或某些函数直接从表中提取... – Guapo

+1

是的,当然存在一种模式。这种模式在PDF规范中有描述,并且是iTextSharp已经为您解析PDF所实现的内容。 PDF规范就像一个35MB的PDF文件。你真的想阅读它来理解这种模式吗?这里有一个链接,如果你这样做:http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf –

+0

所以我想iTextSharp没有一个已经有BT,tf等模式的功能......即使没有读取规格,我也有一组数据在它之间看似简单的是像BT/ET这样的模式。然后,例如'Tf(Assess)Tj'和括号内的是实际数据,但这正是我正在寻找的,如果有解析器,或者甚至是iTextSharp中的一个函数来识别的。 – Guapo