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

TypeScript中如何将超长公司名称拆分为多行以适配PDF生成?

解决PDF中长公司名称的多行拆分问题

嘿,我明白你遇到的问题了——作为编程新手(还刚接触TypeScript),这种字符串拆分排版的小细节确实容易卡壳😉。先帮你梳理下现有代码里的问题:

你的代码里o变量的两次o++操作完全没有明确逻辑,拆分第二行时直接把第一行剩下的所有单词都塞进了company2,根本没控制它的长度,自然会超出边界;company3的拆分逻辑也跟着混乱了,导致整个换行逻辑失效。

其实我们可以写一个通用的按单词拆分文本到指定长度行的函数,这样不管是拆成2行还是3行,都能保证每行不超过设定的字符数(还不会截断单词)。下面是改进后的方案:

步骤1:实现通用的文本拆分函数

这个函数会把输入文本按单词拆分,逐个将单词添加到当前行,直到加上下一个单词就超过最大长度时,就新建一行:

function splitTextIntoLines(text: string, maxLineLength: number): string[] {
  const words = text.split(' ');
  const lines: string[] = [];
  let currentLine = '';

  for (const word of words) {
    // 计算加上当前单词后的长度(要加空格,除非是行首)
    const nextLength = currentLine.length + (currentLine ? 1 : 0) + word.length;
    if (nextLength <= maxLineLength) {
      // 可以加入当前行,加空格(如果不是第一个单词)
      currentLine += currentLine ? ' ' + word : word;
    } else {
      // 当前行满了,存入数组,开始新行
      lines.push(currentLine);
      currentLine = word;
    }
  }

  // 把最后一行加进去
  if (currentLine) {
    lines.push(currentLine);
  }

  return lines;
}

步骤2:在PDF生成逻辑中使用这个函数

替换你原来的else if (companyLength > 120 && companyLength <= 180)块的代码,用这个函数来拆分公司名,然后根据生成的行数组依次绘制:

else if (companyLength > 120 && companyLength <= 180) {
  // 每行最多60字符,拆分公司名称
  const companyLines = splitTextIntoLines(companyName, 60);
  // 依次绘制每行,行间距设为4(和你原来的50-46=4对应)
  companyLines.forEach((line, index) => {
    const yPosition = 46 + index * 4;
    doc.text(line, 22, yPosition);
  });
}

为什么这个方案更靠谱?

  • 它会自动处理任意行数(只要总长度不超180),不用硬编码3行的逻辑
  • 绝对不会截断单词,保证排版美观
  • 逻辑清晰,新手也能看懂每一步的操作

用你的测试公司名称试一下,这个函数会把它拆成刚好不超过60字符的多行,完美适配PDF的边界~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:57:32