ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Joplin 1.5 媒体预览功能详解:内置 PDF 查看器与音视频播放器的实现与使用

Joplin 1.5 媒体预览功能详解:内置 PDF 查看器与音视频播放器的实现与使用 Joplin 1.5 媒体预览功能详解内置 PDF 查看器与音视频播放器的实现与使用【免费下载链接】joplinJoplin - the privacy-focused note taking app with sync capabilities for Windows, macOS, Linux, Android and iOS.项目地址: https://gitcode.com/GitHub_Trending/jo/joplinJoplin 1.5 引入了面向 Markdown 笔记的媒体预览能力用户无需离开编辑器即可直接查看 PDF 文档、播放音频与视频文件。本文以官方发布说明readme/news/20210104-131645.md为主线结合当前仓库中packages/pdf-viewer与packages/app-desktop的源码实现深入讲解该功能的开关配置、平台支持边界与底层工作原理。功能概述让媒体预览回归笔记正文在 Joplin 1.5 之前笔记中插入的 PDF、音频、视频等附件通常需要借助外部程序打开。新版本将三类媒体文件的预览能力直接内建于应用内PDF 文档查看、音频聆听与视频观看使用户在阅读笔记的同时即可完成内容预览减少上下文切换。该功能在发布时被设计为可选特性每个查看器都拥有独立的设置项用户可以在设置界面中按需启用或禁用见下图。从当前仓库源码看这套能力经历了后续演进桌面端除早期默认查看器外还沉淀出了一个独立的packages/pdf-viewer自研 PDF 查看器包并提供了 Beta 开关详见下文「桌面端 PDF 查看器的两层实现」。平台支持范围与边界官方发布说明明确给出了当时的功能覆盖范围这是使用该功能时最重要的前提条件桌面端Desktop仅在Markdown 编辑器中生效即预览行为作用于 Markdown 笔记正文内联的媒体附件移动端Mobile支持音频、视频的预览但PDF 查看器除外——发布时移动端尚不提供 PDF 查看能力设置开关该功能默认可选开启且 PDF、音频、视频各自拥有独立的设置项互不影响。需要说明的是该边界描述对应 Joplin 1.5 发布时点。从当前仓库的结构看桌面端已演进出自研 PDF 查看器组件packages/app-desktop/gui/PdfViewer.tsx其能力与限制以最新版本的实际行为为准。桌面端 PDF 查看器的两层实现当前仓库中桌面端 PDF 预览存在两种形态可以从源码中清晰区分。第一层自研 PDF 查看器包pdf-viewerpackages/pdf-viewer是一个为 Joplin 量身定制的 PDF 查看器其设计目标明确写在 README.md 中查看器渲染在 iframe 内与主应用隔离构建产物输出到/dist目录基于webpack构建app-desktop的构建流程负责把/dist内容与根 html 文件拷贝到适当位置。渲染核心依赖pdfjs-distPDF.js在 main.tsx 中通过pdfjsLib.GlobalWorkerOptions.workerSrc pdf.worker.js配置 Worker 路径保证 PDF 解析不阻塞主线程。入口脚本从宿主 iframe 的x-url、x-type、x-appearance、x-anchorPage等属性读取资源地址、视图类型、主题外观与锚定页码然后按类型渲染两种应用mini迷你视图内嵌在笔记编辑器中支持暗色主题与锚定页码对应 miniViewer.tsxfull全屏视图独立的完整阅读器带标题栏对应 FullViewer.tsx。查看器内部还实现了分页、缩放ZoomControls.tsx、跳页GotoPage.tsx等交互并通过一组自定义 hooks 管理文档加载、可见性、滚动位置等状态hooks 目录下的usePdfDocument.ts、useScrollSaver.ts、useIsVisible.ts等。第二层宿主窗口与命令注册桌面端宿主编排位于 PdfViewer.tsx它创建一个全屏覆盖层内部再嵌入指向./vendor/lib/joplin/pdf-viewer/index.html的 iframe并把资源完整路径Resource.fullPath(props.resource)、主题外观、资源标题与锚定页码通过x-*属性传给查看器。宿主与查看器之间通过postMessage双向通信通信协议定义在 messageService.ts查看器向宿主发送close关闭窗口、externalViewer改用外部程序打开、textSelectedPDF 内选中文本触发宿主右键菜单迷你视图可发送openPdfViewer携带resourceId与pageNo请求打开全屏查看器。打开全屏查看器的入口命令是openPdfViewer其声明与运行时实现在 openPdfViewer.ts命令执行时会先校验资源存在Resource.load(resourceId)并强制校验 MIME 类型必须为application/pdf否则抛出Not a PDF错误——这保证了查看器只会被用于真正的 PDF 资源。Beta 开关useCustomPdfViewer从源码结构看自研 PDF 查看器在桌面端通过一个高级隐藏设置启用定义于 packages/lib/models/settings/builtInMetadata.ts#L1889-L1899useCustomPdfViewer: { value: false, type: SettingItemType.Bool, public: false, advanced: true, appTypes: [AppType.Desktop], label: () Use custom PDF viewer (Beta), description: () The custom PDF viewer remembers the last page that was viewed, however it has some technical issues., storage: SettingStorage.File, isGlobal: true, },关键参数说明默认值false自研查看器默认不启用用户需手动打开advanced: true且public: false该选项属于高级设置不随配置导出/同步暴露isGlobal虽为 true但public为 false 意味着 UI 中仅作为高级项显示核心收益能够记住上次查看的页码对应x-anchorPage与迷你视图的锚定页码能力已知限制官方描述明确提示它存在一些技术问题这也是其长期处于 Beta 的原因。该开关通过NoteEditor逐层传入 Markdown 编辑器组件NoteEditor.tsx并在 CodeMirror v5 与 v6 两个编辑器版本中统一消费。值得注意的演进细节在 CodeMirror v6 实现中源码注释表明目前始终强制使用自研 PDF 查看器Always using useCustomPdfViewer for now, we can add a new setting for it in future if we need to.即新版编辑器不再依赖旧的默认查看器。音频与视频播放器与 PDF 查看器并列Joplin 1.5 同时引入了音频与视频的内联播放能力音频支持在笔记正文中直接聆听音频附件移动端 Note.tsx 等组件负责内联渲染视频支持在笔记正文中直接观看视频附件独立开关官方发布说明强调每个查看器都有其自己的设置即 PDF、音频、视频的开关彼此独立用户可自由组合开启。从移动端源码可以印证媒体渲染被集成进笔记正文的组件树中与附件资源解析流程打通用户在笔记中插入音视频附件后即可就地播放无需跳转外部播放器。构建与调试如何自行编译 pdf-viewer若开发者希望基于源码构建或修改 PDF 查看器官方 README.md 给出了标准流程需在项目根目录执行# 安装依赖post-install 阶段会自动执行 yarn build生成 /dist 目录 yarn install # 代码改动后手动重建 yarn build # 开发模式监听文件变更并自动重建 yarn watch构建完成后app-desktop的构建流程会把/dist目录内容与根目录的 html 文件拷贝到应用的正确位置因此修改查看器后只需重建该包再构建桌面应用即可生效。查看器的单元测试如 pdfSource.test.ts与 Playwright 集成测试markdownEditor.spec.ts可用于验证改动正确性。小结Joplin 1.5 的媒体预览功能标志着笔记应用从纯文本容器向富媒体工作台演进的关键一步PDF、音频、视频三类附件均可内联预览且全部通过独立设置项按需启用。从当前仓库源码可以完整还原其技术脉络——自研pdf-viewer包基于 pdfjs-dist 渲染 PDF通过 iframe 与postMessage协议与宿主解耦openPdfViewer命令以 MIME 校验保证类型安全而 Beta 开关useCustomPdfViewer则为后续迭代预留了空间。对于希望深度定制媒体预览体验的开发者而言packages/pdf-viewer的构建流程与消息协议即是现成的扩展起点。【免费下载链接】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),仅供参考
返回列表