日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第四章、epub文件处理 -- epub文件内部组成

發布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第四章、epub文件处理 -- epub文件内部组成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

第四章、epub文件處理?--?epub文件內部組成


第三章的結尾,我們說到從FBReaderApp類的openBookInternal方法,就要開始對epub文件的處理流程了。

在對這個流程進行詳細的分析之前,我們有必要先用一個章節詳細介紹一下epub文件的內部組成。

首先,epub文件一種壓縮文件,是壓縮格式是與zip壓縮文件是一樣的。換一句話說,epub文件是可以用支持zip格式的解壓縮文件解壓的(有些軟件不能識別epub后綴名,需要手動把.epub的后綴名改成.zip)。

把epub文件解壓之后,打開文件夾,我們可以看到有如下的文件與文件夾,我們一個一個來看一下。


META-INF文件夾

這個文件文件夾的名字翻譯成中文就是“元信息”。文件夾里面只有一個container.xml文件

container.xml文件

文件的內容如下:

這段內容的作用就是標明了.opf文件的位置。這個.opf文件是一個很重要的文件,它記錄了epub文件內部各個文件的具體信息,我們會在介紹OPS文件夾的時候詳細介紹這個文件。

程序必須正確解析.opf文件的內容后才能正常運行,但是.opf這個文件的文件名本身卻是可以自定義的,也就是說,不同的epub文件里面可能包含不同名字、位于不同行位置的.opf文件。那么,如何確保程序能夠正確找到并解析.opf文件呢,就是通過container.xml這個文件來指定.opf文件。正是基于這個原因,epub文件的標準里規定“EPUB?根目錄下必須包含?META-INF?目錄,而且其中必須要有一個文件?container.xml”(引用自http://blog.sina.com.cn/s/blog_6441e0640100gmhv.html)。

大家可以試一下,如果你把解壓后的epub文件里的container.xml文件改名后再重新壓縮成epub文件,程序就會報錯。


OPS文件夾

OPS文件夾主要包含三種重要的文件.opf文件、ncx文件、.xhtml文件。同時,還可能會有css文件和圖片文件。下面詳細介紹下這些文件。


.opf文件

opf代表“Open?Packaging?Format”,意譯成中文差不多應該是“EPUB文件包格式”。我們說過epub文件是個zip壓縮文件,opf文件的作用可以被理解為描述了EPUB文件解壓后,內部各個文件和文件夾的名字、位置等信息。

.opf文件主要包含三個主要的節點metadata、manifest、spine,這個三個節點分別描述了不同信息。


其中,metadata節點定義了epub的作者、書名、語言等元信息。這些元信息大部分都在dc的命名空間下。dc代表Dublin?Core,意指國際組織“Dublin?Core?Metadata?Initiative”定義的標準。


manifest節點的作用是描述epub文件內部對應不同章節對應的文件的位置。manifest節點在這里的作用有點像之前提到的container.xml文件:container定義了.opf文件的位置,而manifest節點中的item子節點的href屬性則定義了含有對應每個章節的文件的位置。


spine節點的作用是定義讀者在順序閱讀時,每個章節出現的先后次序。linear這個節點的作用是這樣的:“?EPUB?規范的閱讀系統將首先打開?spine?中沒有設置為?linear=no?中的第一項”。所以,“建議將封面定義為?linear=no”。(引用自http://blog.sina.com.cn/s/blog_6441e0640100gmi8.html)?

????我們可以看到,我們的測試epub文件似乎并沒有嚴格按照epub規范將封面的linear屬性設置為“no”。正因為如此,第一次打開測試文件的時候,默認的第一頁是封面而不是正文。


.ncx文件

ncx代表“Navigation?Center?eXtended”,意思大致就是導航文件,這個文件與目錄有直接的關系。

.ncx文件中最主要的節點是navMap。navMap節點是由許多navPoint節點組成的。而navPoint節點則是由navLabel、content兩個子節點組成。

navPoint節點中,playOrder屬性定義當前項在目錄中顯示的次序。

navLabel子節點中的text節點定義了每個目錄的名字。

content子節點的src屬性定義了對應每個章節的文件的具體位置。

看到這里,可能會有有人覺得.opf文件與.ncx文件有一點重復:.opf文件的item節點中的href屬性描述了各個章節文件的位置與順序,.ncx文件中的conten節點中的src屬性也描述了各個章節文件的位置與順序。其實他們還是有區別的,區別就在于,.opf文件定義的是讀者在順序閱讀時會用到的章節文件與它們的順序,.ncx文件則定義的是目錄中會用到的章節文件與它們的順序。如果存在某些附件性質的內容被希望在目錄中出現,但卻不希望在讀者順序閱讀的時候出現時,那么就可以通過對.opf文件和.ncx文件進行不同的設置來達到這個目的。當然,大部分的時候,.opf與.ncx這兩個文件的內容基本是重合的。


.xhtml文件

.xhtm文件就是存儲每個章節具體內容。按照epub的規范,存儲具體內容的文件應該是xhtml為后綴名(參照http://zh.wikipedia.org/wiki/EPUB),但是似乎并不是每個epub里面都用xhtml作為存儲具體內容的文件的后綴名。比如,我們的測試文件就使用了html作為后綴名,我還看到過htm作為后綴名的。但其實不管用什么作為后綴名都不會有問題,因為在.opf和.ncx文件已經準確定義文件的位置和后綴名。同時,不管epub文件使用了什么后綴名,FBReader程序都是使用XHTMLReader類來處理這些文件。


樣式文件

樣式文件的作用是定義一些文本信息顯示的格式。并不是每一個epub文件內部都會附有樣式文件,沒有樣式文件的情況下,就會使用程序默認的樣式文件。

在FBReader程序1.0的版本里面并沒有專門讀取epub文件內部樣式文件的類。1.0的版本直接使用了/asstes/default/style.xml作為默認的樣式文件。不管是epub文件是否附有自帶的樣式文件文件,1.0的版本都使用的是這一套樣式文件的格式。2.0的版本增加了讀取自定義樣式文件文件的功能。大家可以在1.0版本和2.0版本下分別打開Quiet這本書(這個文件只作為測試用,請支持正版,多看中譯版購買地址),就可以明顯看到樣式文件格式的不同。

1.0版本中的css解析類:ZLTextStyleCollection


2.0的版本中的樣式文件解析類:


1.0版本顯示效果:


2.0版本顯示效果(標題與小字部分都使用epub文件內置的樣式文件)



圖片文件

圖片文件一般集中存儲在一個文件夾里面。最常見的圖片的文件就是封面圖片。封面圖片的位置會在.opf文件標明。




Mimetype文件

這個文件的內容很簡單,只有一行:application/epub+zip。其實這行內容就是表明了epub文件的mimetype屬性。搞過網頁的朋友應該挺熟悉這個mimetype屬性的,html文件的mimetype屬性就是text/html,樣式文件文件的mimetype屬性是text/樣式文件,js文件的mimtype屬性則是application/javascript。

根據epub的標準,epub根目錄下必須包含mimetype文件,文件名與內容都不能變。不過,我仔細看了下FBReader代碼,并沒有發現專門針對這個文件的部分。我有試著把這個miemtype文件刪掉然后再重新壓縮成epub文件。FBReader程序還是能正常打開這個文件。總而言之,按照標準,mimetype文件必須有,而且文件名與內容都不能變。不過,實際操作起來,沒有mimetype文件,FBReader一樣能正常打開epub文件。



如果大家想更深入得了解epub文件的組成,可以參考下這個博客的相關內容。

http://blog.sina.com.cn/s/blog_6441e0640100gmfe.html

http://blog.sina.com.cn/s/blog_6441e0640100gmhv.html

http://blog.sina.com.cn/s/blog_6441e0640100gmi8.html

http://blog.sina.com.cn/s/blog_6441e0640100gmj9.html



轉載于:https://my.oschina.net/u/938986/blog/335833

總結

以上是生活随笔為你收集整理的第四章、epub文件处理 -- epub文件内部组成的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。