PDF學習(一)

來源:互聯網
上載者:User

PDF(Portable Document Format)檔案格式是Adobe公司開發的電子檔案格式。這種檔案格式與作業系統平台無關,也就是說,PDF檔案不管是在Windows,Unix還是在蘋果公司的Mac OS作業系統中都是通用的。這一特點使它成為在Internet上進行電子文檔發行和數字化資訊傳播的理想文檔格式。越來越多的電子書、產品說明、公司文告、網路資料、電子郵件開始使用PDF格式檔案。PDF格式檔案目前已成為數字化資訊事實上的一個工業標準。

PDF檔案使用了工業標準的壓縮演算法,通常比PostScript檔案小,易於傳輸與儲存。它還是頁獨立的,一個PDF檔案包含一個或多個“頁”,可以單獨處理各頁,特別適合多處理器系統的工作。此外,一個PDF檔案還包含檔案中所使用的PDF格式版本,以及檔案中一些重要結構的定位資訊。正是由於 PDF檔案的種種優點,它逐漸成為出版業中的新寵。

對普通讀者而言,用PDF製作的電子書具有紙版書的質感和閱讀效果,可以“逼真地”展現原書的原貌,而顯示大小可任意調節,給讀者提供了個人化的閱讀方式。由於PDF檔案可以不依賴作業系統的語言和字型及顯示裝置,閱讀起來很方便。這些優點使讀者能很快適應電子閱讀與網上閱讀,無疑有利於電腦與網路在日常生活中的普及。Adobe公司以PDF檔案技術為核心,提供了一整套電子和網路出版解決方案,其中包括用於產生和閱讀PDF檔案的商業軟體Acrobat和用於編輯製作PDF檔案的Illustrator等。 Adobe還提供了用於閱讀和列印亞洲文字,即中日韓文字所需的字型包。

一個最簡單的PDF檔案結構如下:

%PDF-1.4懺嫌
1 0 obj <</Type /Catalog
                 /Pages 2 0 R
             >>endobj
2 0 obj <</Type /Pages
                 /Kids [3 0 R]
                 /Count 1
             >>endobj
3 0 obj <</Type /Page
                 /Parent 2 0 R
                 /MediaBox [0 0 300 200]
                 /Contents 4 0 R
                 /Resources << /ProcSet [/PDF] >>
            >>endobj
4 0 obj << /Length 00 >>
stream
endstream
endobj
xref
0 5
0000000000 65535 f
0000000014 00000 n
0000000071 00000 n
0000000146 00000 n
0000000297 00000 n
trailer << /Size 5
                /Root 1 0 R
           >>
startxref
350
%%EOF

第一行是PDF檔案頭,不同的PDF可能就是那個1.4會不同,因為那表示PDF檔案的版本資訊,最新的PDF版本已經到了1.7,後面的懺嫌可能也會有某些PDF不同,這兩個其實是編碼大於等於128的兩個字元,是告訴其它應用程式該PDF中含有二進位資訊。

然後可以看出編號為1、2、3、4的obj也就是對象,PDF是以對象為基本單位進行結構組織的,其中的1、2、3、4是對象號,其後緊跟的0是組建編號,一般PDF中的這個號都是0,只有在別人修改了PDF中的某些內容的時候才會變成非0,後面的成對的<< >>是一個字典,上述的對象都是一個字典,字典裡面有著成對的Key-Value,比如/Type就是Key表示該對象的類型,後面的/Pages或者/Page分別表示頁面樹和頁面,在PDF裡面頁面是按照樹形結構來組織的,但是這個樹形結構與實際PDF內容的結構是沒有關係的,它不影響PDF實際內容頁面的順序,每棵頁面樹都可能有它的子頁面樹,但最終的有內容的頁面都只能是葉子結點。

注意,剛才所說的幾個對象都是指間接對象,它們都有它們的編號,要引用這些對象的時候只需要寫出它們的對象號、組建編號,再在後面加一個R即可。

下面依次解釋該PDF中的幾個對象,對象1是整個PDF檔案的目錄對象,其/Type的值用/Catalog標示,/Pages的值則指明了頁面樹對象;對象2即是頁面樹對象,其/Kids的值是一個數組,用[]括起來,依順序標識了該樹的子樹或者葉子物件,該檔案只有一個葉子物件,/Count的值表示該頁面樹的所有葉子物件的數目,也就是說該PDF只有一頁;對象3是一個葉子物件(頁面對象),/Type的值為/Page,一個此對象就代表PDF中的一頁,/Parent表示含有這個頁對象的父頁面樹對象,/MediaBox的標識了該頁面的大小,以磅為單位(72磅=1英寸=2.54厘米),/Contents表示該頁面的內容對象,/Resource的值是一個字典,裡面標識了該頁面所用到的一些資源,對象4是頁面的內容對象,該對象為一個流字典,因為其對象字典後面跟了用stream和endstream包含起來的一段二進位流,也稱為內容流(在這個例子裡面為空白,表示該頁沒有內容),想在頁面顯示什麼內容,只需要在這裡面加相應的命令即可(具體命令見PDF Reference),前面字典裡面的/Length的值表示其後的二進位流的長度(以位元組為單位,不包stream、endstream以及endstream前面的分行符號)。

對象4的結束標誌endobj後面的xref一直到檔案最後是PDF檔案的交叉參考資料表和檔案尾部分,PDF檔案對象的尋找都要用到交叉參考資料表和檔案尾,其中檔案尾包括從trailer開始一直到最後,可以看出trailer是一個字典,裡面的/Size標誌PDF的對象的個數(包括PDF預設的0號對象),/Root的值為整個檔案的目錄對象(即含有/Type /Catalog的對象)的間接引用,接下來的startxref也能從字面上猜出來,它標誌著最後一個交叉參考資料表的起始位置(以位元組為單位,交叉參考資料表的字元x(xref中的x)所在的位置減1,因為起始位置是從0開始的),一般應用程式讀PDF都從檔案末尾找startxref開始,最後的%%EOF是檔案結束標誌。

最後最重要的就是交叉參考資料表了,一般情況下,交叉參考資料表有trailer的/Size的值加上1行(不含xref那行),第一行有兩個數,第一個表示該交叉參考資料表的起始物件號(此檔案為0,是PDF自訂的對象0,無特殊作用),第二個表示該交叉參考資料表中的對象數,這裡是5(也包括PDF自訂的0號對象),接下來的5行依次每行表示一個對象,每行的第一個是一個十位的非負整數,表示該對象的起始位置,第二個是一個5位的非負整數,表示該對象的產生數(最大為65535),最後一個是一個或者是f或者是n的字元,f表示該對象未被引用,n表示該對象已被引用,對象號為0的第一行較特殊,其起始位置為0,產生數為65535,最後一位是f,這是PDF的規定,不能改變。在讀取對象資訊的時候,就是靠著這個交叉參考資料表找到各對象位置進行解析的。依次交叉參考資料表一旦被破壞,你的PDF就不能被應用程式(如Adobe Acrobat Reader)開啟了。

最後一點,如果你想要將文中的代碼令存為一個PDF,然後用Acrobat開啟它的話,你很可能會失望了,因為我從UltraEdit裡面拷貝過來的時候裡面的一些涉及到換行的一些字元很可能會被改變,所以對象的位置也會相應的改變,交叉參考資料表中的數值又沒有變,當然打不開了,要想開啟,你可以把存的PDF用UltraEdit重新開啟,切換到二進位視圖(一定不能在文本視圖下儲存),查每個對象的位置(將游標移到對象號的字元前面,UltraEdit狀態列會顯示十六進位的游標位置和十進位的游標位置),將十進位的正確的游標位置填到相應的交叉參考資料表中的欄位即可(填的時候最好是用替換模式而不是刪除模式,按退格鍵右邊的Insert鍵可以切換這兩種模式),4個對象的位置都填好後在二進位模式下儲存,然後再用Acrobat Reader開啟來看看,如果能夠開啟不報錯,就證明你大功告成了!雖然我們只能看到一個什麼都沒有的空白頁面,但好歹這也是我們自己手工製作的第一個PDF檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.