2013-11-21 47 views
0

我想知道如何從PDF文件中實際(適當地)讀取PDF預告片 Byte_offset_of_last_cross-reference_section如何從文件末尾開始讀取二進制文件中的特定值?

根據PDF 1.7 (ISO 32000-1:2008)規範,文件結構的設計方式應該是從文件尾部讀取。這是一個什麼樣的簡化(最小的)預告片看起來像當我使用StreamReader並讀取文件中的行由行(UTF8編碼)的例子:

拖車
< < key1的值1
       鍵2值2
        ...
        keyn值N
> >
startxref
Byte_offset_of_last_cross-reference_section
%% EOF

trailer 
<</Root 7 0 R /Size 7>> 
startxref 
696 
%%EOF 

我想要的值以某種方式搶是值。我只是不確定如何從文件末尾開始使用BinaryReader。

回答

2

您可以使用Seek方法,請參閱here的示例。您可以使用SeekOrigin.End作爲參數,見here其他選項

例如:

using (var reader = File.Open(...)) 
{ 
    reader.Seek(100, SeekOrigin.End); 
    //... 
} 

您就可以開始在一個循環反向讀取,直到你得到的startxref標記(或任何有助於你知道您可以閱讀696),或假定文件末尾的長度爲100個字節,然後按照Anthony在下面的註釋中所建議的那樣在該小陣列中進行查找。

+0

只鏈路答案氣餒。請通過提供代碼片段或更詳細的解釋來反映您嘗試在答案中顯示的內容。 –

+1

從'reader.Length - 50'開始可能會更好,並繼續前進,直到找到所需的東西。不知道在一個文件中實際向後搜索1個字節會有多好。 – Anthony

+0

這是一個好點!,將其添加到答案 –

0

如何使用類似:

List<string> allLines = File.ReadAllLines(filePathHere); 
return allLines[allLines.Count - 2]; 
+1

根據規格,不建議逐行讀取文件。建議(如問題所述)從頭到尾讀取文件。 –

+0

PDF可能相當大。像這樣讀取所有行只是爲了檢索一個數字是一個巨大的資源浪費。 – mkl