如何通过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
相关产品推荐
相关产品推荐

