小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

PDF學(xué)習(xí)(一)

 xrzs 2010-05-12

PDF學(xué)習(xí)(一) 收藏
PDF(Portable Document Format)文件格式是Adobe公司開發(fā)的電子文件格式。這種文件格式與操作系統(tǒng)平臺無關(guān),也就是說,PDF文件不管是在Windows,Unix還是在蘋果公司的Mac OS操作系統(tǒng)中都是通用的。這一特點(diǎn)使它成為在Internet上進(jìn)行電子文檔發(fā)行和數(shù)字化信息傳播的理想文檔格式。越來越多的電子圖書、產(chǎn)品說明、公司文告、網(wǎng)絡(luò)資料、電子郵件開始使用PDF格式文件。PDF格式文件目前已成為數(shù)字化信息事實(shí)上的一個(gè)工業(yè)標(biāo)準(zhǔn)。

PDF文件使用了工業(yè)標(biāo)準(zhǔn)的壓縮算法,通常比PostScript文件小,易于傳輸與儲存。它還是頁獨(dú)立的,一個(gè)PDF文件包含一個(gè)或多個(gè)“頁”,可以單獨(dú)處理各頁,特別適合多處理器系統(tǒng)的工作。此外,一個(gè)PDF文件還包含文件中所使用的PDF格式版本,以及文件中一些重要結(jié)構(gòu)的定位信息。正是由于 PDF文件的種種優(yōu)點(diǎn),它逐漸成為出版業(yè)中的新寵。

對普通讀者而言,用PDF制作的電子書具有紙版書的質(zhì)感和閱讀效果,可以“逼真地”展現(xiàn)原書的原貌,而顯示大小可任意調(diào)節(jié),給讀者提供了個(gè)性化的閱讀方式。由于PDF文件可以不依賴操作系統(tǒng)的語言和字體及顯示設(shè)備,閱讀起來很方便。這些優(yōu)點(diǎn)使讀者能很快適應(yīng)電子閱讀與網(wǎng)上閱讀,無疑有利于計(jì)算機(jī)與網(wǎng)絡(luò)在日常生活中的普及。Adobe公司以PDF文件技術(shù)為核心,提供了一整套電子和網(wǎng)絡(luò)出版解決方案,其中包括用于生成和閱讀PDF文件的商業(yè)軟件Acrobat和用于編輯制作PDF文件的Illustrator等。 Adobe還提供了用于閱讀和打印亞洲文字,即中日韓文字所需的字型包。

一個(gè)最簡單的PDF文件結(jié)構(gòu)如下:

%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可能就是那個(gè)1.4會不同,因?yàn)槟潜硎綪DF文件的版本信息,最新的PDF版本已經(jīng)到了1.7,后面的懺嫌可能也會有某些PDF不同,這兩個(gè)其實(shí)是編碼大于等于128的兩個(gè)字符,是告訴其它應(yīng)用程序該P(yáng)DF中含有二進(jìn)制信息。

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

注意,剛才所說的幾個(gè)對象都是指間接對象,它們都有它們的編號,要引用這些對象的時(shí)候只需要寫出它們的對象號、生成號,再在后面加一個(gè)R即可。

下面依次解釋該P(yáng)DF中的幾個(gè)對象,對象1是整個(gè)PDF文件的目錄對象,其/Type的值用/Catalog標(biāo)示,/Pages的值則指明了頁面樹對象;對象2即是頁面樹對象,其/Kids的值是一個(gè)數(shù)組,用[]括起來,依順序標(biāo)識了該樹的子樹或者葉子對象,該文件只有一個(gè)葉子對象,/Count的值表示該頁面樹的所有葉子對象的數(shù)目,也就是說該P(yáng)DF只有一頁;對象3是一個(gè)葉子對象(頁面對象),/Type的值為/Page,一個(gè)此對象就代表PDF中的一頁,/Parent表示含有這個(gè)頁對象的父頁面樹對象,/MediaBox的標(biāo)識了該頁面的大小,以磅為單位(72磅=1英寸=2.54厘米),/Contents表示該頁面的內(nèi)容對象,/Resource的值是一個(gè)字典,里面標(biāo)識了該頁面所用到的一些資源,對象4是頁面的內(nèi)容對象,該對象為一個(gè)流字典,因?yàn)槠鋵ο笞值浜竺娓擞胹tream和endstream包含起來的一段二進(jìn)制流,也稱為內(nèi)容流(在這個(gè)例子里面為空,表示該頁沒有內(nèi)容),想在頁面顯示什么內(nèi)容,只需要在這里面加相應(yīng)的命令即可(具體命令見PDF Reference),前面字典里面的/Length的值表示其后的二進(jìn)制流的長度(以字節(jié)為單位,不包stream、endstream以及endstream前面的換行符)。

對象4的結(jié)束標(biāo)志endobj后面的xref一直到文件最后是PDF文件的交叉引用表和文件尾部分,PDF文件對象的查找都要用到交叉引用表和文件尾,其中文件尾包括從trailer開始一直到最后,可以看出trailer是一個(gè)字典,里面的/Size標(biāo)志PDF的對象的個(gè)數(shù)(包括PDF默認(rèn)的0號對象),/Root的值為整個(gè)文件的目錄對象(即含有/Type /Catalog的對象)的間接引用,接下來的startxref也能從字面上猜出來,它標(biāo)志著最后一個(gè)交叉引用表的起始位置(以字節(jié)為單位,交叉引用表的字符x(xref中的x)所在的位置減1,因?yàn)槠鹗嘉恢檬菑?開始的),一般應(yīng)用程序讀PDF都從文件末尾找startxref開始,最后的%%EOF是文件結(jié)束標(biāo)志。

最后最重要的就是交叉引用表了,一般情況下,交叉引用表有trailer的/Size的值加上1行(不含xref那行),第一行有兩個(gè)數(shù),第一個(gè)表示該交叉引用表的起始對象號(此文件為0,是PDF自定義的對象0,無特殊作用),第二個(gè)表示該交叉引用表中的對象數(shù),這里是5(也包括PDF自定義的0號對象),接下來的5行依次每行表示一個(gè)對象,每行的第一個(gè)是一個(gè)十位的非負(fù)整數(shù),表示該對象的起始位置,第二個(gè)是一個(gè)5位的非負(fù)整數(shù),表示該對象的生成數(shù)(最大為65535),最后一個(gè)是一個(gè)或者是f或者是n的字符,f表示該對象未被引用,n表示該對象已被引用,對象號為0的第一行較特殊,其起始位置為0,生成數(shù)為65535,最后一位是f,這是PDF的規(guī)定,不能改變。在讀取對象信息的時(shí)候,就是靠著這個(gè)交叉引用表找到各對象位置進(jìn)行解析的。依次交叉引用表一旦被破壞,你的PDF就不能被應(yīng)用程序(如Adobe Acrobat Reader)打開了。

最后一點(diǎn),如果你想要將文中的代碼令存為一個(gè)PDF,然后用Acrobat打開它的話,你很可能會失望了,因?yàn)槲覐腢ltraEdit里面拷貝過來的時(shí)候里面的一些涉及到換行的一些字符很可能會被改變,所以對象的位置也會相應(yīng)的改變,交叉引用表中的數(shù)值又沒有變,當(dāng)然打不開了,要想打開,你可以把存的PDF用UltraEdit重新打開,切換到二進(jìn)制視圖(一定不能在文本視圖下保存),查每個(gè)對象的位置(將光標(biāo)移到對象號的字符前面,UltraEdit狀態(tài)欄會顯示十六進(jìn)制的光標(biāo)位置和十進(jìn)制的光標(biāo)位置),將十進(jìn)制的正確的光標(biāo)位置填到相應(yīng)的交叉引用表中的字段即可(填的時(shí)候最好是用替換模式而不是刪除模式,按退格鍵右邊的Insert鍵可以切換這兩種模式),4個(gè)對象的位置都填好后在二進(jìn)制模式下保存,然后再用Acrobat Reader打開來看看,如果能夠打開不報(bào)錯,就證明你大功告成了!雖然我們只能看到一個(gè)什么都沒有的空白頁面,但好歹這也是我們自己手工制作的第一個(gè)PDF文件


本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/zhanghulin/archive/2010/03/12/5367377.aspx

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多