由于项目需求,想做一个可以读取电子书的需求,而我则主要负责Epub3读书阅读器的前期调研和开发.
先来说一下Epub3到底是什么东西,它是一种电子图书的标准,由国际数字出版社论坛提出;其中包括3种格式标准(文件的附档名为.epub),这个格式已经替换了先前的Open eBook开放电子书标准.他最大的优势是内容可以自动重新编排.文字内容可以根据阅读设备的特性,以适应阅读的方式显示.Epub文件内部使用了XHTML或DTBook来展现文字,并以Zip压缩格式来包裹文件内容.好了Epub的文件格式就说到这,下面看看改如何开始制作.
1.首先我们看到epub文件是由zip包裹的文件,所以我们必须将文件下载到本地,在进行解压,祛除我们需要解析的文件.
我们利用AFNetWorking来下载文件
staticNSString* kBaseUrl =@"http://42.121.255.86:6080/group1/M00/3E/E7/F_Wj2JzfU4nAMBFpTm.epub";
这个是我从一个项目抓取到的一个epub文件的下载地址,然后通过AFNetWorking进行下载,下载代码如下:
我将下载文件放在了一个单独的类中,因为我想让我的代码符合单一功能原则,所以我在这个类中提供了三个代理协议,然后在对应的viewController中实现,可以查看下载的进度,也可以拿到下载后保存的文件路径等信息,如果出错,就提示错误.
下载完文件后,第二部就来到了解压文件的步骤,但是我从来没有使用过解压的这类东西,所以就去谷歌搜索,然后找到了一个第三方叫ZipArchive,如果大家会用到的话直接使用pod引入就可以了
pod 'ZipArchive', '~> 1.4.0'
解压完成后,的目录是这样的.
但是最终我们要解析的文件存放在OEBPS目录下,所以我们要创建一个单独的解析类去解析css和xhtml文件.
而且每本电子书都有章节,所以我们创建
我们在解析类申明需要被解析的文件路径属性和方法,并申明章节model属性而且将解析完的数据通过block返回.
拿到解压后的文件路径后,根据拼接路径拿到我们解析的文件路径开始解析工作
先进性css解析,拿到文章的布局,然后再解析Xhtml拿到文章的内容,这些方法,等下次文章会在github上传,现在就不过多解释了.也可以字形查看DTCoreText的关于HTML和CSS的解析,也可以查看微信团队bang的博客关于数据和渲染的DTCoreText的解析.基本原理都是相似的.解析完成就要用到CoreText了,将解析完的css转成OC对象,在利用OC对象来完成段落样式的布局.利用不局生成NSMutableAttributedString,在利用属性字符串构建CTFrameRef.
有了CTFrameRef就可以通过DrawRect方法绘制到View上用来展示,而电子书的效果可以利用UIPageViewController来实现.今天就先说到这吧.下次分享就会将全部代码上传到github,而且会更详尽的阐述制作过程.谢谢
本人联系方式:qq:513961360
email:513961360@qq.com
也可以加我们的qq群希望能与朋友们一起聊天和学习.群里还有很多iOS开发者,帮助我们解决问题,并且同时学习.
qq群号:580284575