Text
Text
本页介绍如何从页面中读取文本,分为三个细节层次:纯文本、结构化布局块以及单独定位的字形。有关在页面上写入文本,请参见 核心 API and 核心 API.
提取纯文本
Page.GetText() 返回页面按阅读顺序组装的纯文本。这是确认页面实际包含哪些文本的最简单方法——例如,在将字段扁平化或执行涂黑后。
const page = doc.Pages[0];
console.log(page.GetText().includes('Internal memo'));结构化文本
Page.GetStructuredText() 提取按行(基线)和段落式块(通过垂直间距和左边缘对齐)分组的定位文本,返回 TextBlock[] —— 当你需要布局信息而不仅仅是一个平面字符串时,这非常有用。
字形级别的内省
visitContent(doc, page, visitor) 遍历页面的内容流——包括 Form XObjects——并在遇到每个字形、图像或路径时调用 visitor 上的相应处理程序。glyph 处理程序接收一个 GlyphEvent:字形的 text、其设备空间的 quad、fontSize、color,以及诸如 mcid(如果有的话,其所在的标记内容元素)和 artifact(当在 /Artifact 范围内绘制时为真)等来源字段。
import { visitContent } from '@asposefoss/pdf';
let glyphCount = 0;
visitContent(doc, page, {
glyph: (e) => {
glyphCount++;
if (e.artifact) return; // skip decorative content
console.log(e.text, e.quad, e.color);
},
});
console.log('glyphs drawn:', glyphCount);技巧与最佳实践
- 使用
Page.GetText()进行快速的存在/不存在检查;当需要每个字形的精确位置、字体大小或颜色时,使用带有glyph处理程序的visitContent()。 - 检查
GlyphEvent.artifact以跳过标记文档标记为/Artifact而非真实内容的装饰性内容(页面装饰、背景)。 GlyphEvent.mcid在文档被标记时,将字形链接回其所属的结构元素——结合使用 Structure 以便从字形遍历到其逻辑元素。Page.GetStructuredText()为你将字形分组为块;仅在需要GetStructuredText()未提供的每个字形的细节时才直接使用visitContent()。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
Page.GetText()缺少页面上可见的文本 | 文本是以矢量路径或图像的形式绘制的,而不是使用真实的字形显示操作 | 使用visitContent()结合path/image处理程序,以确认到底是哪种内容类型绘制的 |
visitContent()的glyph处理程序会在装饰性背景文本时触发 | GlyphEvent.artifact未被检查 | 跳过e.artifact为true的事件 |
| 提取的文本顺序与视觉阅读顺序不一致 | 纯粹的GetText()组装无法重建多列布局 | 使用 Page.GetStructuredText(),它将文本分组为布局感知的块 |
FAQ
GetText 和 GetStructuredText 有什么区别?
GetText() 返回页面组装文本的一个平面字符串。GetStructuredText() 返回 TextBlock[] —— 按基线和布局将文本分组为行和段落式块,在位置重要时很有用。
我如何获取每个字符的精确位置和字体大小?
调用 visitContent(doc, page, { glyph: (e) => ... })。每个 GlyphEvent 包含字形的 text、设备空间 quad、fontSize、color,以及基线 angle。
我能判断一段文字是实际内容还是装饰吗?
是的——当字形在 /Artifact 标记内容范围内绘制时,GlyphEvent.artifact 为 true,这与 Document.AutoTag() 在决定标记内容时使用的区分相同。
文本提取会看到 Form XObjects 内的内容吗?
是的——visitContent() 在遍历时会进入 Form XObjects,因此通过复用的表单绘制的字形仍会被访问。
API Reference 概述
| 类/方法 | 描述 |
|---|---|
Page.GetText() | 页面按阅读顺序组装的纯文本 |
Page.GetStructuredText() | 文本按行和段落式块进行分组(TextBlock[]) |
visitContent() | 遍历页面内容,发出带有来源信息的字形/图像/路径事件 |
GlyphEvent | 一个定位的字形:text, quad, fontSize, color, mcid, artifact |