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

另请参阅

 中文