2012-09-18 270 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