2017-05-05 56 views
0

詮釋在Drawboard PDF,它產生這種奇怪的交叉引用流(除非我有誤解,我要說不正確):PDF:通過應用程序接受錯誤的交叉引用流

/W = [1, 2, 0] 
Data = [2, 1, 183, 248, 2, 0, 1, 88, 2, 0, 3, 245, 2, 0, 0, 21, 2, 0, 2, 7] 

從參考:

的零爲W陣列中的元素的值表示該 相應的字段不存在的流中,默認 值被使用,如果存在的話。

數據中的每個條目都應該有1 + 2 + 0 = 3個字節,但顯然這不是真的 - 有4個字節的5個條目。沒有我嘗試過的應用程序在打開文件時遇到問題,但我不知道如何在PDF庫中處理這個問題。

+0

有沒有機會看到原始的PDF文檔? –

+0

[原創](https://github.com/pdf-rs/pdf/blob/dev/tests/files/xelatex.pdf) - [註釋](https://github.com/pdf-rs/pdf/ files/977665/xelatex_drawboard.pdf) – Ploppz

回答

2

由於每個4字節組的第一個字節是2,因此我假定您的數據已經應用了預測。解壓縮後,如果應用預測器,則會得到5組3個字節。

更新:正如我正確地估計,外部參照流使用的預測來改善壓縮(這只是在你的文件樣本的外部參照流作爲所有其他遵循相同的模式):

92 0 obj 
<< 
    /DecodeParms <</Columns 3/Predictor 12>> 
    /Filter /FlateDecode 
    /ID [<1EBBF34ADD340749DCDB9CA0F9F0F8F8> <1EBBF34ADD340749DCDB9CA0F9F0F8F8>] 
    /Index [48 1 89 4] 
    /Info 2 0 R 
    /Length 28 
    /Prev 46782 
    /Root 1 0 R 
    /Size 93 
    /Type /XRef 
    /W [1 2 0]>> 
stream 
    xœcbÜþƒ‰1‚‰ù+ƒ(; +ª* 
endstream 
endobj 

解壓後,你有5個4字節的組。您必須應用預測變量,否則解壓縮的數據無效。應用預測器後,您將得到5組3個字節。
這裏沒有關於PDF庫的錯誤。

+0

我假設你的意思是5個4字節的組,因爲總共有20個字節。我沒有使用預測器,但這確實可以做到。令我感到驚訝的是,PDF庫在很大程度上可以寬恕錯誤。但你可能是對的,那確實是發生了什麼。 – Ploppz

+0

我誤解了你預測的意思。現在我明白了,謝謝。如果我可以在這裏問一個後續問題:在PDF 1.7 ref,第75頁中:「使用的特定預測函數明確地編碼在傳入數據中」,沒有任何進一步的信息 - 這是什麼意思? – Ploppz

+0

@Popopz - 當/預測值大於或等於10時,實際的預測代碼編碼在每行第一個字節的數據中。在你的場景中,你有5個4字節的組。第一個字節是預測器,接下來的3個是數據。 – iPDFdev