Text
Text
このページでは、ページからテキストを読み戻す方法を、3つの詳細レベル(プレーンテキスト、構造化レイアウトブロック、個別に配置されたグリフ)で解説します。ページにテキストを書き込む方法については、こちらをご参照ください。 Core API and Core API.
プレーンテキストの抽出
Page.GetText() は、ページの組み立てられたプレーンテキストを読み順で返します。これは、ページが実際に含んでいるテキストを確認する最も簡単な方法です。たとえば、フィールドをフラット化したり、赤字削除を適用した後などに有用です。
const page = doc.Pages[0];
console.log(page.GetText().includes('Internal memo'));構造化テキスト
Page.GetStructuredText() は、ベースラインで行に、垂直間隔と左端揃えで段落のようなブロックにグループ化された配置テキストを抽出し、TextBlock[] を返します — フラットな文字列だけでなくレイアウトが必要なときに便利です。
グリフレベルの内省
visitContent(doc, page, visitor)はページのコンテンツストリームを走査します — Form XObjectも含めて — そして遭遇した各グリフ、画像、またはパスについて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()を使用して簡易的な存在/不存在チェックを行い、各グリフの正確な位置、フォントサイズ、または色が必要な場合はvisitContent()をglyphハンドラと共に使用してください。- 実際のコンテンツではなく
/Artifactとしてタグ付けされた装飾コンテンツ(ページの家具、背景)をスキップするには、GlyphEvent.artifactを確認してください。 GlyphEvent.mcid文書がタグ付けされている場合、グリフをその包含構造要素にリンクします — 以下と組み合わせて Structure グリフから論理要素へたどることができます。Page.GetStructuredText()はグリフをブロックにまとめてくれます;GetStructuredText()が提供しないグリフ単位の詳細が必要なときだけ、直接visitContent()を使用してください。
一般的な問題
| Issue | Cause | Fix |
|---|---|---|
Page.GetText() はページ上に目に見えるテキストが欠落しています | テキストは実際のグリフ表示オペレータではなく、ベクターパスまたは画像として描画されています | visitContent() を path / image ハンドラと共に使用して、実際に描画したコンテンツタイプを確認してください |
visitContent() の glyph ハンドラは装飾的な背景テキストに対して発火します | GlyphEvent.artifact はチェックされていません | e.artifact が true の場合はイベントをスキップしてください |
| 抽出されたテキストが視覚的な読順と一致していません | プレーンな GetText() 組み立てではマルチカラムレイアウトを再構築できません | レイアウト対応ブロックにテキストをグループ化する Page.GetStructuredText() を使用します |
FAQ
GetText と GetStructuredText の違いは何ですか?
GetText() はページの組み立てられたテキストを 1 つのフラットな文字列として返します。GetStructuredText() は TextBlock[] を返します — ベースラインとレイアウトに基づいて行や段落のようなブロックにグループ化されたテキストで、位置が重要な場合に便利です。
各文字の正確な位置とフォントサイズはどうやって取得できますか?
visitContent(doc, page, { glyph: (e) => ... }) を呼び出します。各 GlyphEvent はグリフの text、デバイス空間 quad、fontSize、color、およびベースライン angle を保持します。
テキストが実際のコンテンツか装飾かを判別できますか?
はい — グリフが /Artifact のマークドコンテンツスコープ内で描画された場合、GlyphEvent.artifact は true です。これは Document.AutoTag() がタグ付けを決定するときに使用するのと同じ区別です。
テキスト抽出は Form XObject 内のコンテンツを検出しますか?
はい — visitContent() は走査の一部として Form XObject に入るため、再利用されたフォームを介して描画されたグリフも引き続き処理されます。
API Reference 概要
| クラス/メソッド | 説明 |
|---|---|
Page.GetText() | ページの組み立てられたプレーンテキスト(読み順) |
Page.GetStructuredText() | 行と段落のようなブロックにグループ化されたテキスト(TextBlock[]) |
visitContent() | ページのコンテンツを走査し、出典情報付きのグリフ/画像/パスイベントを発行する |
GlyphEvent | 1つの配置されたグリフ: text, quad, fontSize, color, mcid, artifact |