calibre E-book Viewer 完全指南:从日常翻页到源码级定制
【免费下载链接】calibreThe official source code repository for the calibre ebook manager项目地址: https://gitcode.com/GitHub_Trending/ca/calibre
calibre 内置的 E-book Viewer 是官方源码仓库(GitHub_Trending/ca/calibre)中功能最完整的电子书阅读组件,支持打开全部主流电子书格式,并提供分页/流动双模式、书签、高亮注释、全文搜索、朗读、词典查询与深度界面定制等能力。本篇指南以官方用户手册 manual/viewer.rst 为主线,结合src/calibre/gui2/viewer/下的真实源码实现展开讲解,读完你既能熟练使用每项阅读功能,也能理解其底层工作原理,并学会为自己的电子书编写针对该阅读器的专属 CSS。
启动 E-book Viewer
在 calibre 主界面中,选中书库中的任意一本书并点击工具栏的View按钮,即可在 E-book Viewer 中打开该书。除此之外,阅读器也可以脱离主程序独立启动:
- Windows:从开始菜单启动 E-book Viewer;
- macOS:将其固定到 Dock 后从 Dock 启动;
- Linux:使用桌面菜单中的启动器,或在终端运行命令
ebook-viewer。
从源码结构看,独立启动入口位于 src/calibre/gui2/viewer/main.py,其中option_parser()负责解析命令行参数,而仓库根目录下的 develop/ebook-viewer 是开发环境中的可执行脚本。打开一本书时,阅读器会通过 convert_book.py 的prepare_book()将书籍预处理到本地缓存目录(book_cache_dir()),后续再次打开同一本书可直接命中缓存,加快加载速度。
页面导航与双阅读模式
翻页的三种方式
在书中"翻页"可以通过以下任意方式完成:
- 用鼠标点击页面左侧或右侧页边距区域;
- 按
spacebar、page up、page down或方向键; - 在触摸屏上点按文本或左右滑动。
阅读器控件(工具栏)可通过以下方式调出:
- 在文本上点击鼠标右键;
- 按
Esc或Menu键; - 在触摸屏上点按屏幕顶部 1/3 区域。
Paged 与 Flow 两种模式
阅读器存在两种内容布局模式:
- Paged(分页)模式:内容像纸质书一样按页呈现,方向键上下翻动时整屏切换;
- Flow(流动)模式:文本像网页浏览器中那样连续滚动。
切换方式有两种:通过阅读器控件中的Preferences → Page layout设置,或直接按快捷键Ctrl+M。在源码 toolbars.py 中可以看到阅读模式按钮update_mode_action()会实时同步界面状态;而在 web_view.py 中,模式切换最终通过bridge消息通道驱动渲染层完成布局重建。
书签与阅读位置记忆
自动记忆阅读位置
当你在书中读到一半关闭阅读器时,它会自动记住当前阅读位置,下次打开这本书时直接回到上次停下的地方(对应 ui.py 中的save_state()/restore_state()与initial_cfi_for_current_book()逻辑)。
手动书签
点击阅读器控件中的Bookmarks按钮或按Ctrl+B可添加书签。对于 EPUB 格式书籍,书签实际被写回 EPUB 文件本身(见 annotations.py 的save_annots_to_epub())。这意味着你可以添加书签后把文件发给朋友,对方打开时能看到你留下的书签。若不想让书签写入文件,可在阅读器偏好设置的Miscellaneous部分关闭该行为。
书签面板还支持导入、导出与排序,这些功能由 bookmarks.py 中的export_bookmarks()、import_bookmarks()等方法实现。
目录(Table of Contents)导航
如果当前书籍定义了目录,点击控件中的Table of Contents按钮即可打开目录列表,点击任意章节标题即可跳转到对应内容。目录面板还内置了搜索框,实现按关键词定位目录条目,并支持在当前阅读章节与目录树节点之间自动联动高亮,相关实现集中在 toc.py。
按位置精确导航
电子书不像纸质书有固定页码,因此 calibre 提供了一套不依赖页面的位置(Location)体系:
- 通过控件中的Go to → Location可以输入位置信息精确跳转;
- 在Go to → Location中可以将当前位置复制为一条
calibre://URL 到剪贴板,粘贴到其他程序或文档中,点击该 URL 会在 calibre E-book Viewer 中打开对应书籍并定位到该位置; - 点击书内链接(如脚注)跳转后,可使用控件左上角的Back与Forward按钮回退/前进,行为与浏览器一致。
位置体系底层由 CFI(Canonical Fragment Identifier)驱动:源码中goto_cfi()、get_current_cfi()(web_view.py)负责跳转与取回当前 CFI,ui.py 的cfi_changed()则持续跟踪阅读进度。
Reference mode(引用模式)
点击控件中的Reference mode按钮开启引用模式后,每个段落开头都会显示一个由"章节号 + 段落号"组成的唯一编号。你可以用这个编号与朋友讨论书籍时无歧义地指代某处内容,也可以在Go to function(跳转功能,快捷键Ctrl+G、;、:)中输入该编号直接定位。
该模式在 toolbars.py 中对应toggle_reference_mode动作,界面状态通过update_reference_mode_action()与渲染层同步。
高亮与注释
创建高亮
在阅读器中选中文本后,选区旁会弹出一个小工具条,点击其中的高亮按钮即可创建高亮;你还可以为高亮添加笔记并更改高亮颜色。触摸屏上长按单词即可选中并弹出工具条,进入高亮模式后可通过触摸友好的选择手柄调整选区,将手柄拖到屏幕顶部或底部边缘可边选边滚动。Shift+点击或右键点击可扩展选区,尤其适合跨多页连续选择。
浏览与管理高亮
- 点击控件中的Highlights按钮(快捷键
Ctrl+H)可打开独立面板,按章节列出书中全部高亮; - 在 calibre 主界面中右键点击 View 按钮并选择 Browse annotations,可浏览整个书库中所有书的高亮与笔记;
- 高亮面板支持按颜色样式过滤、编辑笔记、删除与导出(highlights.py 中的
export()、apply_filters()等)。
与 Content server 浏览器阅读器同步
如果你使用 calibre Content server 的浏览器内置阅读器,可以在阅读器偏好Preferences → Miscellaneous中输入 Content server 阅读器的用户名,使桌面阅读器与浏览器阅读器同步注释;使用特殊值*可同步匿名用户。源码层面,同步用户参数以sync_annots_user贯穿 annotations.py 与 integration.py,最终把注释写回书库或书籍文件。
Read aloud(朗读)
点击控件中的Read aloud按钮即可开始朗读当前书籍文本,正在朗读的单词或句子会高亮显示。语音合成使用Piper神经 TTS 引擎或操作系统自带的文本转语音服务,点击朗读时出现的工具条上的齿轮图标可切换后端与语音。
你还可以把Read aloud按钮加入选区工具条(阅读器偏好 →Selection behavior),这样选中一段文字后即可直接朗读该段落。该功能在 tts.py 中实现,支持播放、暂停、继续、变速(slower/faster)等控制。
注意:浏览器中的文本转语音支持很不完整且 bug 较多,因此浏览器阅读器中朗读效果取决于底层浏览器对 TTS 的支持程度。
全文搜索
按Ctrl+F或通过控件打开搜索框。搜索输入框下方的搜索模式决定了搜索行为,共有四种模式:
Contains(包含)
默认模式。在全文任意位置搜索输入文本,忽略所有标点、重音和空格。例如搜索Pena会匹配penal、pen a、pen.a和Peña。勾选Case sensitive(区分大小写)后,重音、空格和标点不再被忽略。
Whole words(整词)
按整词搜索。例如pena会匹配Peña但不会匹配Penal。与 Contains 相同,除非勾选区分大小写,否则忽略重音与标点。
Nearby words(邻近词)
搜索彼此靠近的整词。例如calibre cool会匹配calibre与cool出现在六十个字符以内的所有位置。要改变间距,在词列表末尾追加数字,如calibre cool awesome 120表示三个词出现在 120 字符以内。注意:邻近词搜索不忽略标点与重音。
Regex(正则表达式)
将搜索文本解释为正则表达式。正则语法可参考 manual/regexp.rst 正则表达式教程。
源码印证(search.py):Contains 模式的核心是text_to_regex()——它把输入中的空白映射为\s+、把引号字符映射为字符类(quote_map),并允许零宽不可见字符(软连字符等)穿插在字符之间;整词模式为每个词加\b边界(第 138–142 行);邻近词模式由words_and_interval_for_near()解析,默认间隔常量即default_interval=60,并以. {1,interval}作为词间连接正则(第 101–111、149–159 行);未勾选区分大小写时,编译正则附加IGNORECASE标志(regex_flags)。
Hints mode:纯键盘点击链接
阅读器提供Hints mode(提示模式),允许不使用鼠标点击文本中的链接。按Alt+F后,当前屏幕上的所有链接都会被标上一个数字或字母,直接按对应按键即可点击该链接;按Esc取消 Hints mode 且不选中任何链接。
若屏幕上的链接超过 35 个,部分链接会分配多个字母,此时需依次输入第一个和第二个字母(或输入第一个字母后按Enter)来激活;输入出错可按Backspace撤销。
定制阅读体验
即时字号调节
使用控件中的Font size,或快捷键Ctrl++、Ctrl+-,也可以按住Ctrl键滚动鼠标滚轮。
颜色与页面布局
- 颜色在阅读器偏好Colors部分修改;
- 每屏显示页数及页边距在Preferences → Page layout中调整(快捷键
Ctrl+]/Ctrl+[增减页数,Ctrl+Alt+C设为自动); - 通过Headers and footers可在页眉/页脚显示自定义信息,例如剩余阅读时间、当前章节标题、书内位置等。
高级样式(Styles)
更深入的定制在Styles设置中完成:可以指定显示在文本下方的背景图片,也可以提供一个应用于所有书籍的自定义样式表,用来改变段落样式、文本对齐等。
Profiles(配置档)
按Alt+P可快速创建并切换到不同的配置档(profiles),让多套阅读偏好(字号、配色、布局等)一键切换。配置档的存取由 config.py 的load_viewer_profiles()/save_viewer_profile()管理,菜单生成与切换在 toolbars.py 中完成。
处理不可重排内容(Non re-flowable content)
部分书籍包含无法在页边界断行的超宽内容(如表格或<pre>标签)。遇到这类内容时,应按Ctrl+M切换到flow mode阅读;或者在偏好Styles中添加以下 CSS,强制<pre>标签内的文本自动换行:
code, pre { white-space: pre-wrap }词典查询与自定义查询源
查询单词
在书中双击(触摸屏长按)要查询的单词,然后点击形似图书馆的查询按钮,即可在查询面板中查看释义。面板内置了 Google dictionary、Wordnik 等查询源(lookup.py 中的google_dictionary及special_processor机制即用于处理这类内置源)。
自定义查询源
除内置查询源外,你可以添加自己的查询源:
- 打开Lookup面板,点击Add sources;
- 点击Add,输入名称和 URL 模板;
- URL 中的占位符
{word}会在查询时被替换为选中的单词; - 还可以将某个查询源限制到特定书籍语言,仅当书籍语言匹配时才启用该源。
利用这一点,可以把阅读器指向任何"按词生成 URL"的在线词典,甚至指向本机运行的 HTTP 服务。例如模板http://127.0.0.1:8000/{word}会查询本地运行的词典服务,适合离线阅读或使用无在线版本的词典。
复制文本与图片
用鼠标拖动选中文本或图片内容后,点击右键并选择Copy即可复制到剪贴板;复制的内容可以以纯文本和图片形式粘贴到其他应用中。
图片放大查看
双击(触摸屏长按)图片,即可在独立窗口中按原始尺寸查看;也可以右键点击图片并选择View image。
与纸版同步
某些具有对应纸质版的电子书会包含标记每个纸质页起始位置的元数据。对于这类书:
- 通过控件中的Go to按钮可直接跳转到指定纸质版页码;
- 在阅读器设置中,把Pages from paper edition添加到页眉或页脚,即可在阅读时显示当前位置对应的纸质版页码。
键盘快捷键大全
阅读器与 calibre 其他部分一样提供了大量键盘快捷键,且全部可以在阅读器Preferences中自定义。默认快捷键如下表:
| 快捷键 | 功能 |
|---|---|
Home, Ctrl+ArrowUp, Ctrl+ArrowLeft | 滚动到多文件书籍中当前文件的开头 |
Ctrl+Home | 滚动到全书开头 |
Ctrl+End | 滚动到全书结尾 |
End, Ctrl+ArrowDown, Ctrl+ArrowRight | 滚动到多文件书籍中当前文件的结尾 |
ArrowUp | 向后滚动(flow 模式平滑滚动,paged 模式整屏滚动) |
ArrowDown | 向前滚动(flow 模式平滑滚动,paged 模式整屏滚动) |
ArrowLeft | 向左滚动(flow 模式小幅,paged 模式一页) |
ArrowRight | 向右滚动(flow 模式小幅,paged 模式一页) |
PageUp, Shift+Spacebar | 整屏向后滚动 |
PageDown, Spacebar | 整屏向前滚动 |
Ctrl+PageUp | 滚动到上一章节 |
Ctrl+PageDown | 滚动到下一章节 |
Alt+ArrowLeft | 后退(Back) |
Alt+ArrowRight | 前进(Forward) |
Ctrl+T | 切换目录面板 |
Ctrl+S | 朗读(Read aloud) |
Alt+P | 创建/切换设置配置档(profiles) |
Alt+f | 键盘模式点击链接 |
Ctrl+C | 复制到剪贴板 |
Alt+C | 复制当前位置到剪贴板 |
Ctrl+Shift+C | 以 calibre:// URL 形式复制当前位置 |
/、Ctrl+f、Cmd+f | 开始搜索 |
F3, Enter | 查找下一个 |
Shift+F3, Shift+Enter | 查找上一个 |
Ctrl+Plus, Meta+Plus | 增大字号 |
Ctrl+Minus, Meta+Minus | 减小字号 |
Ctrl+0 | 恢复默认字号 |
Ctrl+] | 增加每屏页数 |
Ctrl+[ | 减少每屏页数 |
Ctrl+Alt+C | 每屏页数设为自动 |
F11, Ctrl+Shift+F | 切换全屏 |
Ctrl+M | 切换 Paged/Flow 布局模式 |
Ctrl+W | 切换滚动条显示 |
Ctrl+X | 切换 Reference mode |
Ctrl+B | 显示/隐藏书签 |
Ctrl+Alt+B | 新建书签 |
Ctrl+N, Ctrl+E | 显示书籍元数据 |
Ctrl+Alt+F5, Ctrl+Alt+R | 重新加载书籍 |
Ctrl+Shift+ArrowRight | 按词向前扩展选区 |
Ctrl+Shift+ArrowLeft | 按词向后扩展选区 |
Shift+ArrowRight | 按字符向前扩展选区 |
Shift+ArrowLeft | 按字符向后扩展选区 |
Shift+ArrowDown | 按行向前扩展选区 |
Shift+Home | 扩展到行首 |
Shift+End | 扩展到行尾 |
Ctrl+A | 全选 |
Shift+ArrowUp | 按行向后扩展选区 |
Ctrl+Shift+ArrowDown | 按段落向前扩展选区 |
Ctrl+Shift+ArrowUp | 按段落向后扩展选区 |
Esc, MenuKey | 显示阅读器控件 |
Ctrl+Comma, Ctrl+Esc, Meta+Esc, Meta+Comma | 显示阅读器偏好设置 |
Ctrl+G, ;, : | 跳转到指定位置 |
Ctrl+Spacebar | 切换自动滚动 |
Alt+ArrowUp | 自动滚动加速 |
Alt+ArrowDown | 自动滚动减速 |
Ctrl+I | 显示/隐藏 Inspector(开发者检查器) |
Ctrl+L | 显示/隐藏词典查询面板 |
Ctrl+Q(macOS 为Cmd+Q) | 退出 |
Ctrl+P | 将书籍打印为 PDF(printing.py 的print_book()) |
Ctrl+F11 | 切换工具栏显示 |
Ctrl+H | 切换高亮面板 |
Ctrl+D | 在编辑器中编辑当前书籍 |
为 calibre E-book Viewer 设计书籍
如果你的书是自制的 EPUB,可以针对 calibre 阅读器做精细化适配。阅读器会在根元素上设置is-calibre-viewerclass,因此可以编写仅对该阅读器生效的 CSS 规则。此外,它还会在body元素上设置以下 class:
| class | 含义 |
|---|---|
body.calibre-viewer-dark-colors | 使用深色配色方案时设置 |
body.calibre-viewer-light-colors | 使用浅色配色方案时设置 |
body.calibre-viewer-paginated | 处于分页(paged)模式时设置 |
body.calibre-viewer-scrolling | 处于流动(flow/非分页)模式时设置 |
body.calibre-footnote-container | 显示弹出式脚注时设置 |
最后,阅读器还把配色方案以 CSS 变量形式暴露给书籍内容:
--calibre-viewer-background-color:当前背景色;--calibre-viewer-foreground-color:当前前景(文字)色;--calibre-viewer-link-color:仅在定义了链接颜色的配色主题中提供。
利用这些变量,书籍样式可以自动跟随阅读器的明暗主题切换,例如让正文颜色始终与阅读器背景保持高对比度,从而获得一致、舒适的阅读体验。
小结
从启动方式、双布局模式、书签/位置/引用体系,到高亮注释、朗读、四模式全文搜索、纯键盘链接、词典自定义源,再到全套可自定义快捷键与面向书籍作者的 CSS 适配接口,calibre E-book Viewer 把"阅读"这件事做成了一个高度工程化的子系统。若想进一步深入,可直接阅读 src/calibre/gui2/viewer/ 下的search.py、web_view.py、annotations.py、bookmarks.py等模块,官方手册 manual/viewer.rst 与正则教程 manual/regexp.rst 则是理解其全部能力的权威参考。
【免费下载链接】calibreThe official source code repository for the calibre ebook manager项目地址: https://gitcode.com/GitHub_Trending/ca/calibre
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考