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

发布时间:2026/9/16 12:40:59

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),仅供参考
延伸阅读

更多相关文章

2026/9/16 12:40:59

STC15驱动ST7735彩屏中文显示:SPI时序与字库设计实战

简介:面向嵌入式入门开发者与电子设计爱好者,STC单片机搭配ST7735驱动1.8寸TFT彩屏的中文显示方案,是一套可直接导入Keil编译运行的完整工程,解决低成本硬件环境下实现中文界面显示的问题。包内提供main.c、GUI.c、ST7735S驱动等源…

2026/9/16 12:35:59

AI大模型技术演进与产业落地挑战

1. 从技术奇点到产业革命:AI大模型的生态现状2023年被称为"大模型爆发元年",全球科技巨头和初创企业相继推出数百个参数规模超千亿的基础模型。这种"百模千态"现象背后,是深度学习技术、算力基础设施和产业需求三重因素共…

2026/9/16 12:35:59

ReMe快速入门指南:安装、启动服务并写入第一个记忆节点

ReMe快速入门指南:安装、启动服务并写入第一个记忆节点 【免费下载链接】ReMe ReMe: Memory Management Kit for Agents - Remember Me, Refine Me. 项目地址: https://gitcode.com/GitHub_Trending/me/ReMe ReMe 是一个面向 AI Agent 的本地优先记忆管理套件&#xff0…

2026/9/16 13:41:07

基于Proteus的无线温度采集报警系统仿真设计与实现

简介:一套基于51单片机与Proteus的无线温度采集报警系统完整设计方案,适合单片机学习者、课程设计开发者以及想了解DS18B20温度采集与LCD1602显示的读者。系统包含温度采集端与显示报警端两大部分,采集端完成温度检测与模拟无线发送&#xff…

2026/9/16 13:41:07

AT89C51驱动DAC0832输出正弦波:Proteus仿真与C代码详解

简介:面向单片机初学入门者与电子设计爱好者,实例基于AT89C51与DAC0832构建正弦波输出电路,配套Proteus仿真源文件与C语言程序,可在Proteus 8.6中直接打开和仿真运行,直观展示D/A转换、查表法生成正弦波以及运放OP07信…

2026/9/16 13:41:07

轻量级智能交通系统:Java SE实现的可调试交通流建模骨架

简介:本资源是一套完整可运行的智能交通系统(ITS)项目源码,面向计算机类专业学生及初级开发人员,适用于课程设计、大作业、毕业设计与项目立项演示等实践场景。压缩包共850个文件,涵盖219个Java核心业务逻辑…

2026/9/16 13:41:07

基于Verilog的FPGA AES加密实现与仿真验证

简介:一套基于Verilog HDL实现AES加密算法的完整Quartus II工程,面向FPGA开发者和信息安全学习者,适合希望深入理解对称加密硬件实现及数字电路设计的读者。包内共214个文件,包含硬件描述语言源码(v/vhd)、…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/16 0:04:09

PHP源码部署实战:从环境配置到运行情侣游戏全攻略

简介:这是一套面向情侣互动场景的PHP完整源码,集成情侣飞行棋、真心话大冒险、情趣骰子等玩法,并内置完整分销制度,可自定义多种返佣比例,源码完全开源无加密,支持微信无感自动授权登录与第三方授权&#x…

2026/9/15 14:22:53

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/15 21:31:11

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/15 11:42:23

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码