Skip to content

识文 DocuLens 深度架构与技术实现 ​

本文系统性拆解 识文 DocuLens 桌面端的核心软件架构、进程间通信(IPC)机制、状态模型与特色交互设计方案。


系统架构分层全景 ​

DocuLens 严格遵循 Electron 安全沙箱规范,划分为 前端渲染层 (Renderer Process)、预加载安全桥 (Preload Bridge) 与 桌面主进程 (Main Process) 三层:

正在加载图表...

关键业务时序解析 ​

原生全屏框选截图与文档置入时序 ​

DocuLens 舍弃了传统的外部第三方截图黑盒,采用 原生 desktopCapturer + 内部 Vue 单页路由 (#/capture) 架构,彻底解决了 Windows 下窗口失焦闪退和点击穿透的顽疾:

正在加载图表...

底图局部框选真实即时识别时序 ​

用户在工作台画布上对导入的文档进行局部快速取词、公式或段落提取时,系统提供毫秒级就地框选识别能力:

正在加载图表...

OCR 全文流式识别与版面块分发时序 ​

针对多页长文档或整张复杂图片,系统采用逐行流式推送架构:

正在加载图表...

本地 SQLite 数据模型设计 ​

本地数据库采用 better-sqlite3 管理,表结构设计如下:

正在加载图表...

核心技术难点与工程解决方案 ​

技术难点现实痛点表现DocuLens 解决方案
截图悬浮工具栏点击消失第三方截图库在 Windows 下创建 type: 'toolbar' 窗口,点击操作栏导致窗口失去焦点(blur)被系统强制关闭,且鼠标事件穿透触发了取消彻底移除第三方截图窗口,改为原生 desktopCapturer + Vue 内部路由 #/capture 全屏独立窗口,悬浮工具栏使用 Vue 原生事件隔离,从根源消除焦点闪退与穿透。
画布框选悬浮卡片点击闪退用户在底图框选后点击弹出卡片,卡片瞬间消失,且右侧面板无识别内容① 悬浮卡片增加 @mousedown.stop、@mouseup.stop 阻断事件冒泡到画布容器;② 接入真实离线裁剪推理通道 recognizeSnippet;③ 提供【插入结果】与【替换全文】动作,实时刷新右侧统计与文本列表。
Windows 终端 GBK 导致 Python 崩溃识别中文时出现 识别未完成: Process terminated 报错① Python 侧 json.dumps 强制指定 ensure_ascii=True 输出纯 ASCII 转义,杜绝跨代码页乱码;② 注入 PYTHONUTF8: '1' 与 PYTHONIOENCODING: 'utf-8';③ Node.js 在创建 readline 之前显式调用 process.stdout.setEncoding('utf-8')。
Electron 主窗口最小化失联截图前执行 win.hide(),截图结束若未正确捕获实例导致主窗口永久隐藏在 main-window.ts 导出全局 getMainWindow() 句柄,并在确认、取消及异常全分支统一调用 restoreMainWindow()(执行 show() / restore() / focus())。
大文件 PDF 离线解析卡顿传统 PDF.js 在 Node 端渲染高清大文件卡顿且依赖复杂的系统 Canvas 原生编译离线搭载轻量 Python pypdfium2(基于 Google PDFium 原生引擎),以毫秒级速度将多页 PDF 无损渲染为高清图像切片。
高分屏与 DPI 缩放坐标漂移2K/4K 屏幕(125%、150% 缩放)下截图与框选坐标位置发生偏移截图裁剪与识别画布均基于屏幕物理像素比例(scaleFactor 与 naturalWidth / clientWidth)进行动态归一化换算,确保框选与 OCR 结果 100% 像素级贴合。