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

使用pdf-lib添加自定义字体绘制文本无显示的解决方法问询

解决pdf-lib自定义字体绘制文本不显示的问题

你的代码存在两个关键问题导致文本不显示:

  • drawText 的第一个参数是空字符串 "",没有实际内容可绘制
  • drawText 的参数顺序错误,该方法的正确格式是 drawText(text, options),你额外多传了一个参数,导致配置未生效

以下是修正后的完整实现代码:

const { PDFDocument, rgb } = require('pdf-lib');
const fs = require('fs').promises;
const path = require('path');
const fontkit = require('@pdf-lib/fontkit');

async function createPdfWithCustomFont() {
  // 创建新的PDF文档
  const pdfDoc = await PDFDocument.create();
  // 注册fontkit
  pdfDoc.registerFontkit(fontkit);

  // 读取自定义字体文件
  const fontPath = path.join(process.cwd(), 'src/fonts/arial.ttf');
  const fontBytes = await fs.readFile(fontPath);
  
  // 嵌入字体
  const customFont = await pdfDoc.embedFont(fontBytes);

  // 添加一页
  const pdfPage = pdfDoc.addPage([600, 800]);

  // 绘制文本(修正参数顺序和内容)
  pdfPage.drawText('这是使用自定义字体的文本', {
    x: 40,
    y: 450,
    size: 12,
    font: customFont,
    color: rgb(0, 0.53, 0.71),
  });

  // 保存PDF到文件
  const pdfBytes = await pdfDoc.save();
  await fs.writeFile('output.pdf', pdfBytes);
}

createPdfWithCustomFont().catch(err => console.error(err));

关键注意事项:

  • 确认 arial.ttf 文件路径正确,且文件本身可正常读取(避免文件缺失或权限问题)
  • 确保已安装所有依赖包:pdf-lib、@pdf-lib/fontkit、fs/promises(Node.js内置)、path(Node.js内置)
  • drawText 的第二个参数是配置对象,所有位置、字体、颜色等设置都需放在这个对象内

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:32:14