ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Joplin 2.14 版本技术详解:OCR 文字识别、ENEX 目录导入、内置备份插件与 CodeMirror 6 编辑器

Joplin 2.14 版本技术详解:OCR 文字识别、ENEX 目录导入、内置备份插件与 CodeMirror 6 编辑器 Joplin 2.14 版本技术详解OCR 文字识别、ENEX 目录导入、内置备份插件与 CodeMirror 6 编辑器【免费下载链接】joplinJoplin - the privacy-focused note taking app with sync capabilities for Windows, macOS, Linux, Android and iOS.项目地址: https://gitcode.com/GitHub_Trending/jo/joplinJoplin 2.142024 年 3 月 1 日发布是一次以让笔记内容可被搜索、可被安全备份、可被平滑迁移为主线的重要版本它在配置界面正式开放了 OCR光学字符识别能力开始捆绑高质量插件首发为 Backup 备份插件增强了 Evernote ENEX 导入器支持恢复笔记间链接、支持整个目录批量导入并继续打磨基于 CodeMirror 6 的新 Markdown 编辑器与富文本编辑器RTE。读完本文你将掌握 2.14 各项新特性的开关位置、实际行为边界以及这些功能在 Joplin 源码中的落地位置与实现机制。OCR从附件不可搜到图片与 PDF 全文可搜功能概述与开启方式光学字符识别OCR能够将包含文字的图片转换为机器可读的文本。从 2.14 起你可以在配置界面Configuration screen的 General 部分启用 OCR一旦激活Joplin 会扫描图片与 PDF 附件从中提取文本数据并纳入全文检索范围。需要特别注意的是两个能力边界OCR 搜索在桌面端与移动端应用均可用**文档扫描即本地执行 OCR 识别**受资源消耗限制仅桌面端可用。官方针对该功能的完整说明见 OCR 文档。源码中的 OCR 设置项桌面端各 OCR 相关设置在 settings 元数据定义 中集中声明这些正是配置界面上General区域中 OCR 条目的数据来源设置键类型默认值作用ocr.enabledBooltrue当前源码默认已开启主开关。启用后应用扫描附件并提取文本使其内容可被搜索关闭则停止 OCR 服务ocr.pdfMode枚举normal/accessiblenormalaccessible模式额外保存 OCR 详细信息以便生成可访问无障碍PDF代价是每页增加约 10–20 KB 数据库占用ocr.handwrittenTextDriverEnabledBoolfalse实验性开关。启用后附件右键菜单出现发送到 Joplin Cloud/Server 处理选项由服务端对手写内容做高质量识别要求 Joplin Server 或 Cloudocr.languageDataPathString空高级选项指定 OCR 语言数据包的 URL 或本地路径ocr.clearLanguageDataCacheButtonButton—高级选项按钮清除缓存并重新下载语言数据文件关于ocr.enabled的默认值需要注意一个版本演进事实2.14 发布时该功能是新开放、需手动开启的而在当前仓库源码中builtInMetadata.ts 里ocr.enabled的value已经是true即后续版本将其变为默认启用。开关如何驱动 OCR 服务桌面端主程序 app.ts 中可以看到完整的接线逻辑app.ts#L57-L59 同时引入OcrService以及两个识别驱动OcrDriverTesseract本地识别与OcrDriverTranscribe服务端识别app.ts#L146-L147 在SETTING_UPDATE_ONE且键为ocr.enabled或SETTING_UPDATE_ALL时调用setupOcrService()也就是说配置界面里拨动开关的瞬间就会启动/停止 OCR 服务无需重启应用。OcrService识别流程与资源约束核心实现位于 OcrService.ts。几个值得了解的实现细节1. 支持的文件格式L18-L26export const supportedMimeTypes [ application/pdf, image/bmp, image/jpeg, image/jpg, image/png, image/webp, image/x-portable-bitmap, ];2. 双队列并发设计L67-L76印刷文本走printed队列并发度为 5手写文本走handwritten队列并发度为 1因为更耗资源。两个队列均不保留任务结果keepTaskResults false。3. PDF 的短路优化L114-L134对 PDF 附件先通过shim.pdfExtractEmbeddedText检查页面是否已内嵌文本。只要有任何一页含文本且未请求可访问处理就直接复用内嵌文本、跳过昂贵的 OCR否则将 PDF 逐页转图片临时目录为tempDir/ocr_pdf_extract后逐页调用驱动识别识别完成后在finally块中清理临时图片。4. 语言映射L28-L44Tesseract 使用自己的语言代码源码将应用 locale 转成 ISO 639-3 后再做修正——中文按地区映射为chi_sim/chi_trazh-TW为繁体挪威语nob映射为 Tesseract 的nor。这也解释了为什么 OCR 识别的语言跟随应用语言设置。5. 后台持续运行L320-L335runInBackground()启动后立即执行一次maintenance()随后每5 分钟定时再扫一遍待处理附件新加入的 PDF/图片无需手动触发。另外识别结果文本有 7 MB 的长度上限L78-L80加密资源encryption_applied会被直接拒绝识别。移动端侧shim 接口 中暴露的 OCR 相关 API 让桌面/移动端共享OcrService的数据模型这正是搜索在两端可用、扫描仅在桌面执行这一能力差异的结构基础从源码结构看扫描依赖桌面端注入的 Tesseract 驱动与pdfToImages等原生能力。内置插件Backup 插件随包分发2.14 起Joplin 开始捆绑bundle官方认为对大多数用户最有价值的高质量插件首发收录了 JackGruber 开发的Backup 插件。它的默认行为是在用户主目录下的JoplinBackup文件夹中自动备份你的笔记相当于在同步之外再加一层安全网。与任何其他插件一样你可以在设置中修改该插件的配置或直接禁用它——捆绑不等于强制。从仓库结构看这套默认插件构建体系位于 packages/default-plugins/pluginRepositories.json 声明要捆绑的插件仓库及其锁定 commitbuildDefaultPlugins.ts 是构建入口对Built类型插件它会克隆上游仓库、git switch到指定分支并 checkout 锁定 commitL59-L81、按需应用补丁、执行npm install后从publish/目录取.jpl文件拷贝到发行包中plugin-patches/io.github.jackgruber.backup.diff 就是针对 Backup 插件插件 IDio.github.jackgruber.backup的补丁文件印证了该插件确实走这条锁定 commit 打补丁 随包编译的捆绑流水线。这套机制的意义在于用户安装 Joplin 即获得经过版本锁定验证的备份插件不必自行到插件仓库查找安装同时上游更新也被锁定在测试过的 commit 上。ENEX 导入器恢复笔记链接 整目录批量导入ENEX 导入器在 2.14 中延续了近几个版本的持续改进各类格式修复与增强并新增了两项实用能力。导入后自动恢复笔记间链接Evernote 导出的 ENEX 文件不包含可靠还原笔记间链接所需的信息因此该功能长期不受导入器支持。2.14 起Joplin 会基于笔记标题去猜测链接指向——在多数情况下能得到预期结果。当无法确定目标笔记时应用会保留原始的 Evernote 链接作为兜底方便你手动恢复或至少找回原始链接目标。导入器的实现分布在 import-enex.ts 及 HTML/Markdown 两种内容生成器 import-enex-html-gen.ts、import-enex-md-gen.ts其中包含的链接解析与内容转换逻辑均有对应的测试覆盖import-enex-html-gen.test.ts、import-enex-md-gen.test.ts。一次导入整个 ENEX 文件目录从 Evernote 导出数据素来繁琐其中一个痛点是一次只能导出一个笔记本——几十个笔记本就意味着几十个 ENEX 文件。这一步无法改善受限于 Evernote 导出机制但 Joplin 2.14 通过支持目录导入来简化后续步骤打开File Import选择ENEX (Directory)选项之一指定保存 ENEX 文件的目录。导入器会处理该目录下的全部 ENEX 文件并为每个文件在 Joplin 中创建一个对应笔记本。更多 Evernote 导入背景可参考 导入导出文档。Beta Markdown 编辑器迈向 CodeMirror 6 统一方案2.14 继续改进基于 CodeMirror 6 的新 Markdown 编辑器。其长期目标是桌面端与移动端使用同一编辑器——移动端React Native已经在使用 CodeMirror 6统一后可以在各设备间提供更一致的用户体验。本版本还改进了插件支持插件作者现在可以通过插件 API 编写原生的 CodeMirror 6 扩展。关于如何开发 Markdown 插件可参考仓库中的 API 教程目录。这一选择的另一个远期收益是由于移动端与桌面端编辑器统一未来版本中移动端也能支持这类编辑器插件——为桌面端编写的插件在移动端同样可以工作。从源码结构看编辑器核心位于 packages/editor/CodeMirror/子目录约 130 个 TypeScript 文件承载桌面端 CM6 封装与扩展与ProseMirror/富文本编辑器内核并列形成Markdown 与富文本两套编辑器、一个编辑器包的布局packages/editor/CodeMirror 中的事件与选区格式化模块如SelectionFormatting.ts、events.ts即为 CM6 扩展提供插件 API 的挂载点。富文本编辑器RTE改进新增文字颜色 互操作性增强2.14 继续推进 RTE 改进重点是与其他应用LibreOffice、Office、浏览器的互操作性以及更好的复制/粘贴处理。一个显著新增是文字颜色设置——这曾是被高频请求的功能。使用方式在工具栏的...按钮中选择颜色功能。值得注意的是颜色应用到 Markdown 编辑器中同样生效。以下为 2.14 中 RTE 的完整变更清单修复富文本编辑器在部分情况下不显示右键上下文菜单改进加快富文本编辑器中粘贴文本与图片的速度修复富文本编辑器中图片与文本的拖放问题修复富文本编辑器中 SVG data URL 图片被损坏修复向 RTE 粘贴富文本有时产生无效标记修复富文本编辑器中新建笔记的换行行为新增富文本编辑器支持更改文字颜色修复富文本编辑器编辑笔记时丢失 HTML 资源链接修复富文本编辑器中含空行的代码块破坏表格修复从 Firefox 复制到 RTE 的文本不包含图片修复从 Chrome 复制图片粘贴到 RTE 的问题RTE 的内核实现位于 packages/editor/ProseMirror/57 个 TypeScript 文件与配套样式粘贴、拖放等修复即作用于此内核之上。查看完整变更日志本文仅概述主要特性。各端完整变更日志可在仓库文档中查阅桌面端desktop.mdAndroidandroid.mdiOSios.md【免费下载链接】joplinJoplin - the privacy-focused note taking app with sync capabilities for Windows, macOS, Linux, Android and iOS.项目地址: https://gitcode.com/GitHub_Trending/jo/joplin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表