iOS Epub阅读器改造记录

这篇具有很好参考价值的文章主要介绍了iOS Epub阅读器改造记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

六个月前在这个YHEpubDemo阅读器的基础上做了一些优化,这里做一下记录。

1.首行缩进修复

由于分页的存在,新的一页的首行可能是新的一行,则应该缩进;也可能是前面一页段落的延续,这时候不应该缩进。YHEpubDemo基于XDSReader,XDSReader目前存在新页首行没有缩进的问题。

修复方案如下:

原来预排版分页后将每一页的富文本设置给XDSReadView,这样就失去了排版的连续性。现在改为将整个章节的富文本设置给XDSReadView,并且对该页需要显示的文本范围进行布局。

在XDSReadView.m的reloadView底部加上以下代码:

CGRect rect = UIEdgeInsetsInsetRect(self.readTextView.bounds, self.readTextView.edgeInsets);

    DTCoreTextLayoutFrame *layoutFrame = [self.readTextView.layouter layoutFrameWithRect:rect range:_pageRange];
    self.readTextView.layoutFrame = layoutFrame;

因为前面我们已经给readTextView设置了整个章节的富文本:

self.readTextView.attributedString = self.readAttributedContent;

因此我们这里要根据布局区域的大小和布局文本的范围,使用layouter来产生一个layout frame。这样产生的布局是具有连续性的。如果仍然使用原来分页的方式的话,需要判断当前页第一行开始处,是否位于上一页的段落中。如果不在其中,而是新的段落,就要获取上一页段落的样式中的headIndent,将其设置给当前页第一行样式中的firstLineHeadIndent。

2.CSS rem修复

XDSReader基于DTCoreText,DTCoreText有自己的css和HTML解析器,但是不支持css的rem特性,这样会导致字体大小有问题。由于DTCoreText没有提供root element上下文,目前暂时将rem当em处理,虽然会有一些误差,但不至于字体大小变1pt。

3.树形目录

根据epub规范,我们是可以解析获得任意多级的目录的。考虑到目录可以折叠展开,当我们获得了树形数据结构后,我们可以使用BFS(宽度优先遍历)来实现目录的打平:

- (void)reloadData
{
    self.catalogs = [NSMutableArray arrayWithArray:CURRENT_BOOK_MODEL.catalog.children];
    NSMutableArray *q = [NSMutableArray arrayWithArray:CURRENT_BOOK_MODEL.catalog.children];
    while (q.count > 0) {
        XDSCatalogueModel *top = q[0];
        [q removeObjectAtIndex:0];
        if(top.isExpand){
            [q addObjectsFromArray:top.children];
            NSInteger idx = [self.catalogs indexOfObject:top];
            if(idx == NSNotFound){
                idx = -1;
            }
            [self.catalogs insertObjects:top.children atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(idx+1, top.children.count)]];
        }
    }
    [self.tableView reloadData];
}

首先我们将一级目录节点加入临时数组和结果数组,如果当前临时数组数组不为空,则取出第一个,并且从临时数组中移除。如果这个节点是展开的,就把这个节点的子节点加入临时数组。现在我们从结果数组中找到这个节点的位置,将它的子节点按顺序插入后面。像这样往复前面的操作,直到临时数组为空为止。最终我们得到了一个平坦的列表。

4.增加页码

增加页码就是在预排版和分页时,需要记录每一个章节的页码范围,每一页的文字范围等,然后据此计算页面所在的页码,以及页码所在的文字范围等。

5.textblock背景色修复

源码中会给textblock设置一个难看的深蓝色的背景色,在我们的修复中会首先尝试获取textblock的背景色,没有的话才设置为白色:

 CGColorRef color = [textBlock.backgroundColor CGColor];
    if(!color){
        color = [[UIColor whiteColor] CGColor];
    }

6.其他

另外对阅读进度记录,添加note也做了一些修复。增加了水平滚动翻页类型。

最终的效果:

iOS Epub阅读器改造记录,ios,epub

iOS Epub阅读器改造记录,ios,epub

 iOS Epub阅读器改造记录,ios,epub

 源码:GitHub - Mamong/YHEpubDemo: Epub 阅读器

 后续考虑使用Swift重写,并将epub解析部分抽取出来。文章来源地址https://www.toymoban.com/news/detail-654315.html

到了这里,关于iOS Epub阅读器改造记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端pdf-阅读器-3d版

    目录 一、基于pdf.js、turnjs4封装的3d翻页效果pdf文件阅读器、pdf文件url拼接地址栏就可以展示、兼容pc端、H5端 二、效果展示图 三、部分源码 四、点赞关注加收藏私信我发源码(记得私信我、发邮箱哈) 一、基于pdf.js、turnjs4封装的3d翻页效果pdf文件阅读器、pdf文件url拼接地址

    2024年03月24日
    浏览(45)
  • 基于 ChatGPT 实现一个 PDF 阅读器

    最近随着 OpenAI 开放了相关 API, 市面上出现了越来越多的 AI 应用,chatpdf 这个项目吸引了我的注意,它是如何突破 API 最大 token 的限制来读取这种长文本的呢? 基于对 chatpdf 原理的好奇,我开始研究起市面上相关的应用,于是简单了解后写了个简单的 demo 用于学习,顺便熟

    2023年04月09日
    浏览(38)
  • 【Swift】拆分小说阅读器功能,分享内部实现

    公司项目结束了,公司估计也快黄了,年底事少,也给了我不少时间来维护博客。 公司的项目是一个类似于简书的创作平台,涵盖写作、小说、插画内容。 本期主要先下小说阅读部分,UI样式仿照的是微信读书样式,因之前也写过小说阅读器,但是代码并没有解耦,这次彻彻

    2024年01月20日
    浏览(51)
  • 基于微信小程序的小说阅读器小程序

    小说阅读器小程序 当今时代,是信息大爆炸的时代,人们每天都能接收到数不清的各类信息,其形式不仅包含传统的文字和图片,还有视频、音频等多阅读资料源也较以往增长了太多。因此市面上各种阅读类应用的用户体验参差不齐,所以设计一个通用的阅读器,小说阅读器

    2024年01月17日
    浏览(61)
  • Dynamsoft 条形码阅读器 10.0.0 Crack

    将来自不同来源的图像数据转换为标准输入图像数据。 7月 06, 2023 - 10:32新版本 特征 SDK经过重构,与DynamsoftCaptureVision(DCV)架构集成,该架构包括: ImageSourceAdapter(ISA) - 用于将来自不同源的图像数据转换为标准输入图像数据的标准输入接口。此外,ISA还集成了一个图像

    2024年02月12日
    浏览(34)
  • Xpdf 阅读器源码编译后查看文件中文乱码问题解决

    经查阅,是由于缺少中文字体包: 第一步: 下载所需要的字体包 下载https://dl.xpdfreader.com/xpdf-t1fonts.tar.gz 包含 下载中文字体包(非嵌入字体) http://ftp.gnu.org/gnu/non-gnu/chinese-fonts-truetype/gkai00mp.ttf.gz http://ftp.gnu.org/gnu/non-gnu/chinese-fonts-truetype/gbsn00lp.ttf.gz 完整包含中文字体文件如

    2024年02月07日
    浏览(53)
  • Koodo Reader : 一个开源免费的电子书阅读器

    今天在浏览 GitHub 的时候,偶然发现了一个非常有趣的开源项目——Koodo Reader。这个项目是一款开源免费的电子书阅读器,支持多种格式。它具有一些非常独特的功能,深深地吸引了我的注意。在接下来的内容中,我将为大家详细介绍一下这个备受关注的阅读器项目。 Koodo

    2024年01月22日
    浏览(49)
  • WPF开发txt阅读器7:自定义文字和背景颜色

    除了字体、字体大小之外,文字和背景颜色也会影响阅读观感,其设置方法与选择字体如出一辙,都通过combobox控件来选择。故而在阅读设置里面添加 考虑到C#中封装的大多数颜色,其实我们都不太认识,为了更加直观,故而在 ComboBox 中的每个选项都赋上对应的颜色,其对应

    2024年02月08日
    浏览(51)
  • 在线电子书阅读小程序,微信小程序电子书阅读,微信小程序小说阅读器毕业设计作品

    目的 :本课题主要目标是设计并能够实现一个基于微信小程序在线电子书阅读系统,前台用户使用小程序,后台管理使用基Java+MySql技术;通过后台录入电子书信息、书目录信息,用户通过小程序登录,查看电子书列表、查看电子书信息、查看电子书目录、阅读。 整个系统使

    2024年02月08日
    浏览(52)
  • 用Adobe Reader PDF阅读器来验证电子签名有效性

    正常情况下,Adobe的阅读器打开PDF会显示“已签名且所有签名都有效”,表明这份PDF是一份没有经过篡改的电子文档,即 该PDF上所添加的 数字证书 是有效的数字证书; 该PDF上所添加的 数字签名 没有经过篡改; 该PDF上的 所有内容 没有经过篡改。 通过Adobe Reader阅读器打开签

    2024年02月07日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包