Node.js中pdfjs-lib字体加载异常导致PDF解析不全问题
解决pdfjs-lib解析PDF仅显示一半内容及字体加载报错问题
问题原因
报错提示无法加载标准字体LiberationSans-Regular.ttf,核心原因是Node.js环境下,pdfjs-lib无法自动获取标准字体资源,导致依赖该字体的文本无法渲染,最终只显示PDF的部分内容。
解决方案
1. 确认依赖路径
pdfjs-dist npm包自带标准字体文件,存放在node_modules/pdfjs-dist/fonts/目录下,同时字符映射文件在node_modules/pdfjs-dist/cmaps/目录。
2. 修改代码配置
引入path模块,在getDocument配置中添加字体和字符映射的路径参数:
const path = require('path'); const pdfjsLib = require("pdfjs-dist/build/pdf.js"); const pdfjsWorker = require('pdfjs-dist/build/pdf.worker.entry.js'); pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjsWorker; pdfjsLib.disableFontFace = true; const loadingTask = pdfjsLib.getDocument({ data: pdfData, // 指定标准字体文件的基础路径 standardFontDataUrl: path.join(__dirname, 'node_modules/pdfjs-dist/fonts/'), // 配置字符映射文件路径(可选,部分PDF需要) cmapUrl: path.join(__dirname, 'node_modules/pdfjs-dist/cmaps/'), cmapPacked: true }); const pdf = await loadingTask.promise; const page = await pdf.getPage(pageNumber);
3. 注意事项
- 如果项目使用打包工具(如Webpack),需要将
pdfjs-dist/fonts和pdfjs-dist/cmaps目录复制到构建输出目录,并调整standardFontDataUrl和cmapUrl为构建后的相对路径。 - 若自定义字体路径,确保该目录下包含所需的标准字体文件(如
LiberationSans-Regular.ttf等)。
内容的提问来源于stack exchange,提问作者Vignesh T
相关产品推荐
相关产品推荐

