做者:Samphp
最近我在慕課網發佈了兩門關於Web閱讀應用開發的課程,採用Vue全家桶開發。免費課是入門級課程,初步實現了一個閱讀器。實戰課是進階課程,實現了一個高性能的互聯網閱讀應用。兩個項目都採用自適應佈局,同時支持PC端和移動端,想要系統提高前端技能的同窗不要錯過。css
免費課《快速入門Web閱讀器開發》當即學習html
免費課DEMO當即體驗前端
實戰課《Vue2.5 實戰微信讀書 媲美原生App的企業級web書城》當即學習web
實戰課DEMO當即體驗spring
本教程爲系列教程,主要目的是向你們分享如何開發一個功能強大的Web閱讀器,技術棧是Vue全家桶。緩存
在上一篇手記中,我介紹了閱讀應用的常見功能與閱讀器的實現原理,沒有讀過的同窗能夠點擊這裏。在開發閱讀器以前,咱們先要了解常見的電子書格式,如:txt、PDF、ePub和mobi等,下面簡單介紹這些格式:微信
本教程主要講解ePub閱讀器的開發。app
上一篇手記爲你們粗略展現了閱讀器的開發流程,接下來的系列教程我將由淺入深,爲你們詳細介紹如何開發一個閱讀器。編輯器
正式開發以前,咱們須要瞭解什麼是ePub標準。ePub是Electronic Publication(電子出版物)的縮寫,它是IDPF制定的電子出版物標準。
資料來源:idpf.org/about-us
ePub標準目前已經推出3.0版本,它包含如下幾個部分:
想要深刻研究ePub標準的同窗點擊這裏,官方爲咱們提供了很是詳細的文檔。
下面咱們來看看一本ePub電子書的內部結構,測試電子書點擊這裏下載。
將電子書的後綴名改成zip,以後用解壓軟件進行解壓,能夠獲得一個文件夾,以下圖所示:
打開電子書目錄,在META-INF目錄下有一個container.xml文件,這是電子書的容器文件(Container),閱讀器解析ePub電子書就是從這個文件開始的。
ePub標準對Container有很是嚴格的規定,主要內容以下:但願深刻研究Container標準的同窗能夠點擊這裏,咱們打開測試電子書的container.xml,內容以下:
<?xml version="1.0"?>
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
<rootfiles>
<rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml"/>
</rootfiles>
</container>
複製代碼
經過rootfile的full-path屬性咱們能夠了解到在OEBPS目錄下存在一個content.opf文件,咱們打開OEBPS目錄找到這個文件
經過代碼編輯器打開這個文件,下面節選其中的關鍵內容:<?xml version="1.0"?>
<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="bookid" version="2.0">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
<dc:title>Agile Processes in Software Engineering and Extreme Programming</dc:title>
<dc:creator>Juan Garbajosa, Xiaofeng Wang and Ademar Aguiar</dc:creator>
<dc:language>En</dc:language>
<dc:rights></dc:rights>
<dc:publisher>Springer International Publishing, Cham</dc:publisher>
<dc:identifier id="bookid">978-3-319-91602-6</dc:identifier>
<meta name="cover" content="A978-3-319-91602-6_CoverFigure_IMG"/>
<meta name="epub-converter-version" content="v3.47"/>
</metadata>
<manifest>
<item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
<item id="css1" href="springer_epub.css" media-type="text/css"/>
<item id="A468350_1_En_1_ChapterPart1" href="A468350_1_En_1_ChapterPart1.html" media-type="application/xhtml+xml"/>
<item id="A468350_1_En_1_Chapter" href="A468350_1_En_1_Chapter.html" media-type="application/xhtml+xml"/>
<item id="A468350_1_En_5_Fig1_HTML_IMG" href="A468350_1_En_5_Fig1_HTML.gif" media-type="image/gif"/>
...
</manifest>
<spine toc="ncx">
<itemref idref="ACoverHTML"/>
<itemref idref="A468350_1_En_BookFrontmatter_OnlinePDF"/>
<itemref idref="A468350_1_En_1_ChapterPart1"/>
<itemref idref="A468350_1_En_1_Chapter"/>
<itemref idref="A468350_1_En_2_Chapter"/>
<itemref idref="A468350_1_En_3_ChapterPart2"/>
...
</spine>
<guide>
<reference type="cover" title="Cover" href="ACoverHTML.html"/>
<reference type="toc" title="Table of Contents" href="A468350_1_En_BookFrontmatter_OnlinePDF.html#Toc"/>
<reference type="text" title="Cosmic User Story Standard" href="A468350_1_En_1_Chapter.html"/>
</guide>
</package>
複製代碼
ePub標準規定一個opf文件根標籤爲package,其中必須包含metadata、manifest和spine,guide、bindings和collection屬於可選項
metadata遵循DCMES(Dublin Core Metadata Element Set:都柏林核心元素)的規定,DCMES的目的是爲了規範電子信息的描述,詳細瞭解DCMES能夠點擊這裏。ePub規定metadata下必須至少包含如下三個元素:
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
<dc:title>Agile Processes in Software Engineering and Extreme Programming</dc:title>
<dc:language>En</dc:language>
<dc:identifier id="bookid">978-3-319-91602-6</dc:identifier>
</metadata>
複製代碼
manifest存儲了電子書資源文件的詳盡列表
<manifest>
<item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
<item id="ACoverHTML" href="ACoverHTML.html" media-type="application/xhtml+xml"/>
</manifest>
複製代碼
提供電子書閱讀的順序
<spine toc="ncx">
<itemref idref="ACoverHTML"/>
<itemref idref="A468350_1_En_BookFrontmatter_OnlinePDF"/>
</spine>
複製代碼
ePub標準的核心是利用zip技術,將不一樣類型的文件打包爲一個ePub文件,利用xml技術進行配置管理,結合ePub標準的規定將各種資源文件(如html、css、圖片、音頻和視頻)有序地組織起來,從而保證了各種閱讀器解析時的一致性。
本文向你們介紹了電子書的常見格式,並詳細講解了ePub標準。理解ePub標準是開發電子書閱讀器的一個前提,你們能夠動手嘗試將本文提供測試電子書解壓,而後進行分析,也能夠經過互聯網經過其餘ePub電子書嘗試解析,看看它們是否符合ePub標準。