我遇到了我編寫的過濾器程序的問題。它可以檢測如果文件是PDF文檔閱讀前5個字節的文件,它比較固定的緩衝區:PDF文檔中是否允許字節順序標記?
25 50 44 46 2D
這工作得很好,只是我看到的是開頭的幾個文件字節順序標記來代替:
EF BB BF 25 50 44 46 2D ^-------^
我想如果這實際上是由PDF specs允許的。如果我檢查文檔的第7.5節,我把它讀作「無」:
PDF文件的第一行應是由5個字符的標題%PDF-後跟形式的版本號1.N,其中N是一個數字然而0-7
,我在野外看到這些文件和用戶會很困惑,因爲PDF閱讀器程序可以打開這些文件通過我的過濾器拒絕。
那麼:PDF文檔開始時是否允許BOM標記? (我不是在談論一個String對象,但這裏的PDF文件本身)
您的最後一段實際上是不正確的。許多應用程序專門在PDF文件的前面添加了二進制數據,以便強制文件傳輸協議將文件作爲二進制文件處理,而不會通過錯誤處理平臺之間的結尾來破壞PDF文件。由於Adobe Acrobat一直在正確地處理這個問題(因此也需要其他PDF閱讀器),這並不是什麼大不了的事情。 –
我們可能會劈頭髮,但我仍然支持這種說法。該規範實際上建議_after_ ASCII版本標題作者應該包含一個包含四個二進制字符的註釋部分,以在其PDF包含二進制數據(這些日子大部分都是這樣)時強制進行二進制傳輸。然而,這不是OP文件開頭的BOM,但是。 (實際上它並不是真正的BOM。)另外,在我15多年的Web開發中,我從來沒有將垃圾數據放在任何二進制文件的前面來強制它下載,這裏有一個專用的HTTP頭。 –
我不是說你做了它:)但它通常是完成的。我已經在前面寫了一堆垃圾(當然不是BOM),PDF書面預檢軟件和PDF文件非常常見。這不是由錯誤的軟件,而是非常刻意地完成的。 –