You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Tauri+SvelteKit应用中配置Pdfjs-dist的Worker?

Tauri + SvelteKit 中配置 pdfjs Worker 离线方案

针对你在发布版中无法加载pdfjs Worker的问题,以下两种离线可用的方案可以解决:

方案一:Blob URL 加载(推荐,无需额外资源配置)

直接将Worker源代码转为Blob URL,完全脱离文件路径依赖,开发和发布版通用:

import pdfjsLib from 'pdfjs-dist';
// 以raw形式导入Worker源代码
import pdfjsWorkerCode from 'pdfjs-dist/build/pdf.worker.mjs?raw';

// 创建Blob并生成URL
const workerBlob = new Blob([pdfjsWorkerCode], { type: 'application/javascript' });
const workerUrl = URL.createObjectURL(workerBlob);

// 配置pdfjs的Worker路径
pdfjsLib.GlobalWorkerOptions.workerSrc = workerUrl;

// 正常解析PDF
const myPdf = await pdfjsLib.getDocument(buffer).promise;

// 注意:在PDF处理完成后,可释放Blob URL避免内存泄漏
// URL.revokeObjectURL(workerUrl);

方案二:Tauri 静态资源协议加载

将Worker文件作为静态资源,通过Tauri的tauri://asset协议访问:

  1. 复制node_modules/pdfjs-dist/build/pdf.worker.mjs到SvelteKit的static/pdf/目录下;
  2. 在代码中区分开发和发布环境配置路径:
import pdfjsLib from 'pdfjs-dist';

// 开发环境用原URL方式,发布环境用Tauri资产协议
const workerSrc = import.meta.env.PROD 
  ? 'tauri://asset/pdf/pdf.worker.mjs' 
  : new URL('pdfjs-dist/build/pdf.worker.mjs', import.meta.url).pathname;

pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc;

const myPdf = await pdfjsLib.getDocument(buffer).promise;

为什么之前的方法失效?

Tauri发布版使用tauri://协议运行,常规new URL()生成的路径无法匹配Tauri的资源加载规则;?url导入的路径在打包后也无法被Tauri正确解析,导致Worker加载失败。

内容的提问来源于stack exchange,提问作者Joss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:19:59