由于項(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)行下載,下載代碼如下:

我將下載文件放在了一個(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)建

我們?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.

有了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