2015-04-02 98 views
4

按照PDF 1.7說明書中,二段3.4(http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf,90頁):PDF文件在下載時如何能夠部分顯示?

前面部分描述了各個對象的語法。此 部分描述瞭如何將對象組織在PDF文件中以實現隨機訪問和增量更新。甲規範PDF文件最初 包括四個要素(參見圖3.2)的:

  • 甲一個行標頭識別哪個 文件符合

  • 將含有體的PDF規範的版本對象組成包含在 文件

  • 包含關於間接 對象文件中的信息的交叉引用表文檔

  • 拖車文件的主體內給予交叉引用表中的與某些 特殊對象的位置

基本上,該結構具有頭,後跟的主體內容,然後是交叉引用表,最後是給出外部參照表的位置的預告片。這裏的關鍵部分是trailerxref表位於文件的末尾,xref表包含正文內容的相關元數據(主要是10位字節偏移量)。

鑑於外部參照表本身位於在PDF文件的盡頭:

  • 它怎麼說,我的瀏覽器(谷歌瀏覽器)能夠部分地顯示PDF文件(第一整個文件完成下載之前,大約有一百頁左右)?

看到我的部分下載的PDF文件的截圖:

Partially downloaded PDF file

+1

查閱參考文獻中的「線性化」,或查看[this ultra-brief description](https://docs.oracle.com/cd/E51711_01/TSG/FAQ/What%20are%20linearized%20PDF %20files_.html)。 – usr2564301 2015-04-02 17:44:44

回答

4

類型的PDF文件的OP描述也被稱爲「網絡優化」(營銷術語)或「線性化「(PDF術語中的技術術語)。

但必須注意,如果兩個附加條件(在文件的線性特徵的頂部)得到滿足,它僅適用於:

  1. PDF閱讀器需要能夠處理這些類型的PDF並利用線性化功能。
  2. 服務線性化PDF的(遠程)主機需要支持「字節流」

如果字節流不是由服務器或者如果PDF文件不線性,整個文件仍然需要下載完全之前,觀衆可以顯示任意頁面的支持。

有關OP引用的PDF文件結構的說明不適用於線性PDF文件。這些組織在一個稍微不同的方式:

  1. 有應用特殊規則PDF對象的順序(「標準」的PDF文件可以以任意順序對象)。
  2. PDF文檔需要包含一些稱爲「提示表」的附加結構,以保證其中的高效導航(即使它尚未完全下載)。

關於附加結構,線性化的PDF包含兩組其對象:

  1. 在第一組是所述文件目錄中,所有的文檔級對象,並屬於第一所有對象-to-可以顯示的頁面中(不一定是 「0頁」!)。對象應按順序編號。

  2. 第二組包含所有其它對象。

這些團體應由xref桌子部分進行索引。

  1. 第一組的xref部分緊接在第一個間接對象後面出現,非常接近文件的開頭。
  2. 第二組的xref部分被定位在該文件(正如在標準的非線性的PDF)的端部。

緊接%PDF-1.x標題行之後的第一個對象應包含一個字典關鍵字,指示文件的/Linearized屬性。

這種整體結構允許符合讀者學習對象地址的完整列表非常迅速,無需從開始下載完整的文件來結束:

  • 觀衆可以顯示第一頁(S )非常快,在下載完整的文件之前。

  • 用戶可以在第一頁顯示後立即點擊縮略圖頁面預覽(或文件的ToC中的鏈接)以跳轉到例如第445頁,並且查看器然後可以通過請求遠程服務器通過字節範圍請求來傳遞這些「無序」,以便查看器可以更快地顯示該頁面,從而請求頁面445所需的所有對象。 (當用戶讀出的訂購頁面,完整的文檔的下載仍然會在後臺...這本身是這樣的線性化的PDF的例子 - )

PDF「線性化」的技術細節可以在Adobe's original PDF 1.7 Specification(大約11兆字節的「規範」附錄F中找到文件!)

相關問題