如何在EPUB阅读器中实现“分页”?

13

您有没有想过如何在EPUB阅读器中实现“分页”功能? .EPUB文件本质上就是HTML页面,而EPUB阅读器会渲染这些HTML页面。 但我很好奇为什么像Adobe Digital Edition这样的一些EPUB阅读器可以实现分页。 如果我们跳转到任何一页,您将不会发现半个显示的行(即只有字母的上半部分可见,下半部分在下一页),或者只有一半的图片在当前页上,另一半在下一页上。 如果我不能完整地在当前页面上显示某行内容,如何将其推送到下一页?

2个回答

16
在底层的 HTML 中,你可以放置类似下面这样的内容:
<span style="page-break-after: always" />

我使用这个CSS样式来创建页面分页。在Stanza阅读器(iPhone)和Kindle(转换为Kindle格式后)中效果很好。 - Larry K

2

EPUB实际上没有页面的概念——它适用于可重排内容,以适应显示容器的尺寸。因此,您提出的建议有点像是一种hack。

话虽如此,用户习惯于页面,大多数阅读器都实现了某种页面概念。

您需要实现类似Knuth的分页算法,这又依赖于他的段落和行断字算法。请参阅他的TeX书籍以获取完整的文学代码(如果我没记错的话,它是用Pascal编写的)。 (这不是非常复杂的代码——我在很多年前编写的桌面出版程序中实现了一个)。

如果您选择这条路,这意味着您可能无法使用UIWebView。

顺便说一下,Adobe Digital Edition实现了Knuth算法的变体。


6
-1 因为 EPUB 绝对需要在章节之前插入分页符等。如何实现:使用 CSS 规则,例如 div.chapter {page-break-after: always;}。 - Larry K
如果CSS3是一个选项:列族(阅读W3C规范中的细则,您将看到如何创建固定高度/宽度的列大小)非常有效,并且只需要一个容器div。其余部分基于“门户”大小的数学计算(目前在Java中执行此操作以在Webview中使用)。 - Dan
你有Adobe Digital Edition使用Knuth算法的参考资料吗?我知道InDesign使用,但不确定这个。 - Jill-Jênn Vie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接