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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:57:15