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

Node.js中如何在pdf-lib的drawText方法中设置单词间距?

在pdf-lib中自定义文本间距的解决方法

问题原因

你遇到的问题是因为pdf-lib的drawText默认不会自动放大空格间距,且如果需要不同位置的差异化间距,内置参数无法满足需求。

解决方案

方案1:使用内置wordSpacing参数(统一单词间距)

如果只需要给所有空格分隔的单词设置统一的额外间距,可以用wordSpacing选项,它会在每个空格对应的位置额外增加指定宽度的间距:

firstPage.drawText(`2 5 5 5 5 5 5 5`, {
  x: 274,
  y: 655,
  font: courierBoldFont,
  size: 15,
  color: rgb(0, 0.5, 1),
  wordSpacing: 10, // 每个单词间额外增加10点间距
});

方案2:手动拆分文本并逐个绘制(自定义差异化间距)

如果需要不同位置的间距不一样(比如有的地方3个空格宽度,有的地方2个),就得手动拆分文本,逐个绘制每个部分并精确控制x坐标:

// 拆分需要绘制的文本片段
const textSegments = ['2', '5', '5', '5', '5', '5', '5', '5'];
// 定义每个片段之间的额外间距(单位:点),数量比片段数少1
const segmentSpacings = [5, 18, 18, 18, 12, 12];

let currentX = 274;
const yPos = 655;
const fontSize = 15;

textSegments.forEach((segment, index) => {
  // 绘制当前文本片段
  firstPage.drawText(segment, {
    x: currentX,
    y: yPos,
    font: courierBoldFont,
    size: fontSize,
    color: rgb(0, 0.5, 1),
  });

  // 计算当前片段的宽度,更新x坐标
  const segmentWidth = courierBoldFont.widthOfTextAtSize(segment, fontSize);
  currentX += segmentWidth;

  // 如果不是最后一个片段,加上对应的额外间距
  if (index < segmentSpacings.length) {
    currentX += segmentSpacings[index];
  }
});

补充说明

如果直接在文本中输入多个空格(比如2 5)无法生效,大概率是字体加载异常,或者使用的非等宽字体导致空格宽度不明显。优先确认courierBoldFont是否正确加载为Courier等宽字体,再尝试上述方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:50:36