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

使用react-pdf/renderer实现网站PDF下载功能时遭遇fontkit 'create'导出错误的求助

解决@react-pdf/renderer中fontkit 'create'导出错误的方案

我之前也碰到过这个完全一样的问题,折腾了好一阵才解决,结合你的情况(React 17.0.2,试过多个react-pdf版本),给你几个可行的方案:

问题重现

你遇到的错误是:

./node_modules/@react-pdf/font/lib/index.browser.es.js Attempted import error: 'create' is not exported from 'fontkit' (imported as 'fontkit')

这个问题本质是**@react-pdf/renderer依赖的fontkit版本和你当前项目中安装的fontkit版本不兼容**——新版本的fontkit移除了create导出,而react-pdf的部分版本还在依赖这个API。


解决方案1:锁定兼容的fontkit版本

这是最直接有效的方法,根据react-pdf的版本选择对应的fontkit版本:

  • 如果你用的是react-pdf v3.x:安装fontkit@2.x版本
  • 如果你用的是react-pdf v2.x:安装fontkit@1.x版本

执行命令安装指定版本:

# 针对react-pdf v3.x
npm install fontkit@2.0.2
# 或者用yarn
yarn add fontkit@2.0.2

安装完成后重新启动项目,应该就能解决这个导入错误了。


解决方案2:用package.json强制统一依赖版本

如果你的项目里有其他依赖也安装了fontkit,导致版本冲突,可以在package.json里添加resolutions字段强制所有依赖使用同一个fontkit版本:

{
  "resolutions": {
    "fontkit": "2.0.2"
  }
}

然后重新安装依赖:

# npm用户需要先安装npm-force-resolutions工具(如果没装的话)
npx npm-force-resolutions
npm install

# yarn用户直接执行
yarn install

解决方案3:优化你的PDF下载代码(可选)

顺便提一下,你当前的下载代码可以简化,不需要手动调用updateContainer,react-pdf的pdf函数可以直接接收组件实例生成PDF:

onClick={async () => {
  // 直接传入组件生成PDF blob
  const blob = await pdf(<InvoicePDF />).toBlob();
  saveAs(blob, "document.pdf");
}}

这样代码更简洁,也避免了不必要的API调用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:52:48