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

如何通过PDF.js获取单字符信息而非文本块信息?

单字符提取方案

调用getTextContent时传入{ splitChars: true }参数,就能强制将每个字符拆分为独立的文本项,获取单个字符的坐标、宽度等信息,满足你基于等宽字体检测空格的需求。

修改后的代码示例

const base64 = "data:application/pdf;base64,******";
const loadingTask = pdfjsLib.getDocument({ data: atob(base64.replace(/^.*,/, '')) });
const pdfDocument = await loadingTask.promise;
const page = await pdfDocument.getPage(1);
// 开启单字符拆分模式
const textContent = await page.getTextContent({ splitChars: true });
console.log(textContent.items);

单字符数据示例

此时textContent.items的每一项对应单个字符:

[
  {
    "str": "S",
    "dir": "ltr",
    "width": 9.8,
    "height": 9.8,
    "transform": [9.8, 0, 0, 9.8, 58.8, 721.0800000000004],
    "fontName": "g_d0_f1",
    "hasEOL": false
  },
  {
    "str": "a",
    "dir": "ltr",
    "width": 9.8,
    "height": 9.8,
    "transform": [9.8, 0, 0, 9.8, 68.6, 721.0800000000004],
    "fontName": "g_d0_f1",
    "hasEOL": false
  },
  // ... 剩余字符项
]

空格检测逻辑

因为是等宽字体,正常相邻字符的X坐标(transform数组第5项)差值等于单个字符宽度。若差值大于该宽度,说明中间存在空格,差值除以字符宽度即可得到空格数量。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:32:20