Epub3電子閱讀器的制作(一)

由于項(xiàng)目需求,想做一個(gè)可以讀取電子書的需求,而我則主要負(fù)責(zé)Epub3讀書閱讀器的前期調(diào)研和開發(fā).

先來(lái)說(shuō)一下Epub3到底是什么東西,它是一種電子圖書的標(biāo)準(zhǔn),由國(guó)際數(shù)字出版社論壇提出;其中包括3種格式標(biāo)準(zhǔn)(文件的附檔名為.epub),這個(gè)格式已經(jīng)替換了先前的Open eBook開放電子書標(biāo)準(zhǔn).他最大的優(yōu)勢(shì)是內(nèi)容可以自動(dòng)重新編排.文字內(nèi)容可以根據(jù)閱讀設(shè)備的特性,以適應(yīng)閱讀的方式顯示.Epub文件內(nèi)部使用了XHTML或DTBook來(lái)展現(xiàn)文字,并以Zip壓縮格式來(lái)包裹文件內(nèi)容.好了Epub的文件格式就說(shuō)到這,下面看看改如何開始制作.

1.首先我們看到epub文件是由zip包裹的文件,所以我們必須將文件下載到本地,在進(jìn)行解壓,祛除我們需要解析的文件.

我們利用AFNetWorking來(lái)下載文件

staticNSString* kBaseUrl =@"http://42.121.255.86:6080/group1/M00/3E/E7/F_Wj2JzfU4nAMBFpTm.epub";

這個(gè)是我從一個(gè)項(xiàng)目抓取到的一個(gè)epub文件的下載地址,然后通過(guò)AFNetWorking進(jìn)行下載,下載代碼如下:


下載epub文件

我將下載文件放在了一個(gè)單獨(dú)的類中,因?yàn)槲蚁胱屛业拇a符合單一功能原則,所以我在這個(gè)類中提供了三個(gè)代理協(xié)議,然后在對(duì)應(yīng)的viewController中實(shí)現(xiàn),可以查看下載的進(jìn)度,也可以拿到下載后保存的文件路徑等信息,如果出錯(cuò),就提示錯(cuò)誤.

下載完文件后,第二部就來(lái)到了解壓文件的步驟,但是我從來(lái)沒(méi)有使用過(guò)解壓的這類東西,所以就去谷歌搜索,然后找到了一個(gè)第三方叫ZipArchive,如果大家會(huì)用到的話直接使用pod引入就可以了

pod 'ZipArchive', '~> 1.4.0'

解壓完成后,的目錄是這樣的.

解壓文件

但是最終我們要解析的文件存放在OEBPS目錄下,所以我們要?jiǎng)?chuàng)建一個(gè)單獨(dú)的解析類去解析css和xhtml文件.

而且每本電子書都有章節(jié),所以我們創(chuàng)建

章節(jié)Model

我們?cè)诮馕鲱惿昝餍枰唤馕龅奈募窂綄傩院头椒?并申明章節(jié)model屬性而且將解析完的數(shù)據(jù)通過(guò)block返回.

拿到解壓后的文件路徑后,根據(jù)拼接路徑拿到我們解析的文件路徑開始解析工作


開始解析文件

先進(jìn)性css解析,拿到文章的布局,然后再解析Xhtml拿到文章的內(nèi)容,這些方法,等下次文章會(huì)在github上傳,現(xiàn)在就不過(guò)多解釋了.也可以字形查看DTCoreText的關(guān)于HTML和CSS的解析,也可以查看微信團(tuán)隊(duì)bang的博客關(guān)于數(shù)據(jù)和渲染的DTCoreText的解析.基本原理都是相似的.解析完成就要用到CoreText了,將解析完的css轉(zhuǎn)成OC對(duì)象,在利用OC對(duì)象來(lái)完成段落樣式的布局.利用不局生成NSMutableAttributedString,在利用屬性字符串構(gòu)建CTFrameRef.


構(gòu)建CTFrameRef的部分代碼

有了CTFrameRef就可以通過(guò)DrawRect方法繪制到View上用來(lái)展示,而電子書的效果可以利用UIPageViewController來(lái)實(shí)現(xiàn).今天就先說(shuō)到這吧.下次分享就會(huì)將全部代碼上傳到github,而且會(huì)更詳盡的闡述制作過(guò)程.謝謝

本人聯(lián)系方式:qq:513961360

email:513961360@qq.com

也可以加我們的qq群希望能與朋友們一起聊天和學(xué)習(xí).群里還有很多iOS開發(fā)者,幫助我們解決問(wèn)題,并且同時(shí)學(xué)習(xí).

qq群號(hào):580284575

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近在寫的一個(gè)項(xiàng)目涉及到epub格式電子書的制作,借這個(gè)機(jī)會(huì)總結(jié)一下epub這個(gè)電子圖書標(biāo)準(zhǔn),并利用Python語(yǔ)...
    knarfeh閱讀 19,389評(píng)論 1 28
  • 上次已經(jīng)對(duì)epub閱讀器的制作進(jìn)行了思路分析,現(xiàn)在就開始慢慢入手開始制作epub3閱讀器 首先大家可以回顧一下上一...
    iOSDevVicky閱讀 2,242評(píng)論 4 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,525評(píng)論 19 139
  • 那個(gè)胡椒粉粘在雞腿的皮上,真的好像此雞被虐待致死的黑青。。。。 真的是好隨手的豬肚雞。 豬肚是超市直接買的愛(ài)森的洗...
    左家半畝閑田閱讀 385評(píng)論 0 0
  • 今天的第一網(wǎng)紅,小將傅園慧當(dāng)之無(wú)愧。 她以小組第三的成績(jī)晉級(jí)女子100米仰泳決賽,這個(gè)成績(jī)并不算亮眼,但賽后的采訪...
    奇言巷語(yǔ)閱讀 874評(píng)論 0 7

友情鏈接更多精彩內(nèi)容