如何用 calibre:// URL 让其他程序或文档打开 calibre 中的书籍和执行搜索
2026/9/13 9:56:17 网站建设 项目流程

如何用 calibre:// URL 让其他程序或文档打开 calibre 中的书籍和执行搜索

【免费下载链接】calibreThe official source code repository for the calibre ebook manager项目地址: https://gitcode.com/GitHub_Trending/ca/calibre

如果你需要从一个 HTML 文件、Word 文档或其他程序里,用一次点击就让 calibre 打开指定书籍、跳到书中某个位置,或者执行一次搜索,可以借助 calibre 内置的 URL 协议。calibre 会把自己注册为calibre://URL 的处理程序,因此这类链接既可以放在命令行中直接运行,也可以嵌进 HTML 文件或 Word 文档,操作系统会自动调用 calibre 执行链接指定的操作(参见 url_scheme.rst)。

本文覆盖以下 URL 类型:

URL作用
calibre://switch-library/切换到指定书库
calibre://show-book/在 calibre 中定位并显示一本书
calibre://view-book/在阅读器中打开一本书的指定位置
calibre://search/在指定书库中执行搜索
calibre://book-details/打开某本书的书籍详情窗口
calibre://show-note/打开作者/系列等字段的备注窗口

准备条件

只需一台已安装 calibre 的电脑。calibre 安装后会注册calibre://协议,命令行方式调用形如:

calibre calibre://switch-library/Some_Library

这条命令会打开 calibre 并切换到名为Some Library的书库。注意规则:书库名取书库文件夹的文件夹名,空格替换为下划线;特殊值_表示当前书库。

如果书库名包含空格或特殊字符,需要改用十六进制编码(hex encoding),语法形如calibre://switch-library/_hex_-AD23F4BC,其中_hex_-前缀后面跟的是书库名的 UTF-8 字节、每个字节用两个十六进制字符表示。文档给出的真实示例是:

calibre://switch-library/_hex_-4c6962726172792e746573745f736d616c6c

这个值对应书库名Library.test_small。编码方法就是把参数编码为 UTF-8 字节序列,再把每个字节替换为对应的两个十六进制字符;例如字符串abc的 UTF-8 字节是0x61 0x62 0x63,编码结果就是616263

定位并显示某本书:show-book

URL 语法:

calibre://show-book/Library_Name/book_id

book_id是书的数字 ID。获取方式:在 calibre 界面中,把鼠标悬停在Book details(书籍详情)面板里的Click to open链接上,书籍文件夹路径末尾括号中的数字就是 ID。

另一个更省事的做法:在Book details面板上右键,选择Copy link to book,即可复制当前显示书籍的链接。

使用show-book链接时文档说明了几种边界情况:

  • 如果当前有激活的搜索且该书不匹配该搜索,搜索会被清除;
  • 如果当前选中了某个虚拟书库(Virtual library),calibre 会在该虚拟书库中查找此书,找不到则清除虚拟书库。

如果希望在显示书籍的同时切换到指定虚拟书库,使用查询参数:

calibre://show-book/Library_Name/book_id?virtual_library=Library%20Name

或把虚拟书库名做十六进制编码:

calibre://show-book/Library_Name/book_id?encoded_virtual_library=hex_encoded_virtual_library_name

虚拟书库名中的空格要替换为%20。如果该书不在指定虚拟书库中,则忽略该虚拟书库参数。

在阅读器中打开书籍的指定位置:view-book

URL 语法:

calibre://view-book/Library_Name/book_id/book_format?open_at=location

book_format是书籍格式,例如EPUBMOBIopen_at=location是可选参数,指定书中的位置。

文档给出的最实用的获取方式是:先在阅读器中打开这本书,然后在阅读器控制栏选择Go to->Location,界面上会给出一个可直接复制的 URL,粘贴到别处即可(参见 viewer.rst)。点击该 URL 会用 calibre 阅读器在当前位置打开这本书。同样的 URL 也可以通过快捷键Ctrl+Shift+C复制当前位置到剪贴板(Copy current location as calibre:// URL to clipboard)。

执行搜索:search

URL 语法有两种:

calibre://search/Library_Name?q=query calibre://search/Library_Name?eq=hex_encoded_query

query是任意合法的 calibre 搜索表达式。搜索表达式的基本用法参见 gui.rst 的The search interface一节,例如Asimov Foundation format:lrf会匹配元数据中同时含AsimovFoundation且有 LRF 格式的书籍。表达式较复杂时,按前述方法编码为十六进制字符串并改用eq参数。

不带查询参数时,calibre://search/Library_Name会清除当前搜索。

虚拟书库的默认行为:执行搜索前 calibre 会清除当前选中的虚拟书库,以确保能搜到所有书籍。要保留当前虚拟书库,追加参数:

calibre://search/Library_Name?q=query&virtual_library=_

要切换到指定虚拟书库再搜索,则使用:

calibre://search/Library_Name?virtual_library=Library%20Name

calibre://search/Library_Name?encoded_virtual_library=hex_encoded_virtual_library_name

如果已经在 calibre 中执行了一次搜索,想生成对应的链接:右键单击搜索栏,选择Copy search as URL

打开书籍详情窗口和字段备注

打开某本书的详情窗口(不改变当前书库和已选书籍):

calibre://book-details/Library_Name/book_id

打开作者、系列等字段的备注窗口:

calibre://show-note/Library_Name/Field_Name/id_Item_Id

Field_Name是列名,例如authorstags;自定义列要把字段名开头的#替换为下划线,例如#mytags写作_mytags。条目除了可以用数字 ID 指定外,还可以用名称指定,形式为val_Item_Namehex_Hex_Encoded_Item_Name。文档中的示例:

calibre://book-details/Library_Name/authors/val_John%20Doe

生成show-note链接最方便的方式:在 calibre 中显示你想要的那条备注,点击Copy URL按钮,URL 会被复制到剪贴板。

在模板中批量构造 calibre:// 链接

如果你的目标不是手工写一两条链接,而是从书籍模板自动生成(比如把链接写入元数据列或目录页),template_lang.rst 给出了完整的模板构造方式。核心思路是用to_hex()函数编码书库名,再拼接成 URL。以switch-library为例:

program: strcat('calibre://switch-library/_hex_-', to_hex(current_library_name()))

文档示例中该模板生成的 URL 为:

calibre://switch-library/_hex_-4c6962726172792e746573745f736d616c6c

其中current_library_name()也可以替换成实际书库名字面量,如to_hex('Library.test_small')

其他 URL 的模板示例(均来自文档,$id是模板可访问的书籍数字 ID):

  • 定位书籍:
program: strcat('calibre://show-book/_hex_-', to_hex(current_library_name()), '/', $id)
  • 生成搜索链接(搜索表达式为tags:"=.AA",含空格和特殊字符,必须十六进制编码后用eq传递):
program: strcat('calibre://search/_hex_-', to_hex(current_library_name()), '?eq=', to_hex('tags:"=.AA"'))

生成结果:

calibre://search/_hex_-4c6962726172792e746573745f736d616c6c?eq=746167733a223d2e414122

同一 URL 也可以用make_url_extended构造:

program: make_url_extended('calibre', '', 'search/_hex_-' & to_hex(current_library_name()), 'eq', to_hex('tags:"=.AA"'))
  • 打开书籍详情窗口:
program: strcat('calibre://book-details/_hex_-', to_hex(current_library_name()), '/', $id)
  • 打开字段备注(示例为#authtest自定义列中Boy-Żeleński, Tadeusz的备注,文档示例输出为calibre://show-note/_hex_-4c6962726172792e746573745f736d616c6c/_authtest/hex_426f792dc5bb656c65c584736b692c205461646575737a):
program: strcat('calibre://show-note/_hex_-', to_hex(current_library_name()), '/_authtest/hex_', to_hex('Boy-Żeleński, Tadeusz'))

文档同时提醒:没有模板函数能返回show-note所需的Item_Id,因此模板通常采用hex_Hex_Encoded_Item_Name这种按名称编码的形式。

验证方式与限制

  • 验证是否生效:以上每种 URL 的文档都给出了"反向生成"路径,可以作为验证手段——用show-book打开一本书后,在Book details面板右键Copy link to book,对比复制出的链接与你手写的 URL 是否一致;在阅读器中用Go to->LocationCtrl+Shift+C复制位置链接;在搜索栏右键Copy search as URL复制搜索链接。链接执行后,calibre 会完成对应动作(切换书库、选中书籍、打开阅读器位置、执行搜索、弹出详情/备注窗口)。
  • 书库名规则:必须与书库文件夹名一致(窗口标题栏显示的名称,注意大小写),空格替换为下划线,含特殊字符时用_hex_-编码;_代表当前书库。
  • book_id 的来源:只能通过界面悬停Click to open链接时查看,或复制现有链接获取;文档没有提供按书名反查 ID 的命令。
  • 虚拟书库行为是各 URL 的差异点:show-book找不到书时清除虚拟书库,view-book无虚拟书库参数,search默认清除虚拟书库、可用&virtual_library=_保留。
  • 文档中的示例值(如Library.test_small、ID1353Boy-Żeleński, Tadeusz)都是文档示例,你的书库会产生不同的编码值和 ID,需按上述方法自行生成。

如果你需要在链接中区分不同书库或含特殊字符的名称,始终优先用_hex_-编码形式;如果只是想快速拿到一条可用链接,优先用界面上对应的"Copy"入口(Book details 面板、搜索栏、阅读器 Location 对话框),再把这些链接嵌入 HTML 文件或文档即可。

【免费下载链接】calibreThe official source code repository for the calibre ebook manager项目地址: https://gitcode.com/GitHub_Trending/ca/calibre

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询