Page API リファレンス
v0.3.34 から、すべてのバインディングが Page オブジェクトを公開します。抽出呼び出しごとに page_index を引き回す必要はなく、ドキュメントを反復してページ上で直接抽出メソッドを呼び出せます。型名は Python、Node.js、C#、Go で一貫して Page、Rust では同じ形を PdfPage として公開しています。
クイック例
Python
from pdf_oxide import PdfDocument
with PdfDocument("paper.pdf") as doc:
for page in doc: # len(doc)、doc[i]、doc[-1] も使える
print(page.text[:80])
md = page.markdown(detect_headings=True)
Rust
use pdf_oxide::api::Pdf;
let mut doc = Pdf::open("paper.pdf")?;
for i in 0..doc.page_count()? {
let page = doc.page(i)?;
println!("{}", &page.text()?[..80]);
}
JavaScript / TypeScript (Node)
const { PdfDocument } = require("pdf-oxide");
const doc = new PdfDocument("paper.pdf");
for (const page of doc) {
console.log(page.extractText().slice(0, 80));
}
doc.close();
Go
package main
import (
"fmt"
"log"
pdfoxide "github.com/yfedoseev/pdf_oxide/go"
)
func main() {
doc, err := pdfoxide.Open("paper.pdf")
if err != nil { log.Fatal(err) }
defer doc.Close()
pages, _ := doc.Pages()
for _, page := range pages {
text, _ := page.ExtractText()
fmt.Println(text[:80])
}
}
C#
using PdfOxide;
using var doc = PdfDocument.Open("paper.pdf");
foreach (var page in doc.Pages)
{
Console.WriteLine(page.ExtractText()[..Math.Min(80, page.ExtractText().Length)]);
}
Python — Page
遅延プロパティ形式です。内容は最初のアクセス時にパースされ、Page にキャッシュされます。
| メンバー | 戻り値 | 説明 |
|---|---|---|
page.text |
str |
抽出テキスト(段組みを考慮) |
page.chars |
list[Char] |
文字単位のレコード(bbox、フォント付き) |
page.words |
list[Word] |
単語単位のレコード(bbox 付き) |
page.lines |
list[TextLine] |
テキスト行(bbox 付き) |
page.spans |
list[Span] |
スタイル付きスパン(フォント、サイズ、太さ) |
page.tables |
list[Table] |
構造化されたテーブル行とセル bbox |
page.images |
list[Image] |
画像メタデータ |
page.paths |
list[Path] |
ベクターパスのレコード |
page.annotations |
list[Annotation] |
このページ上の注釈 |
page.markdown(detect_headings=True) |
str |
Markdown 変換 |
page.plain_text() |
str |
プレーンテキスト(レイアウト情報なし) |
page.html() |
str |
HTML 変換 |
page.render(format="png") |
bytes |
ページを PNG / JPEG としてレンダリング |
page.search(term, case_sensitive=False) |
list[SearchResult] |
このページ内のテキスト検索 |
page.region(rect) |
PageRegion |
矩形内に限定した抽出 |
with PdfDocument("paper.pdf") as doc:
page = doc[0] # または doc.page(0)
for word in page.words: # 初回アクセスでパース、以降はキャッシュ
print(word.text, word.bbox)
# 範囲を限定した抽出
header = page.region((0, 700, 612, 92)).extract_text()
既存の編集用 PdfPage クラス(書き込み用)は変更なし。新しい Page は読み取り専用です。
Rust — PdfPage
use pdf_oxide::api::Pdf;
let mut doc = Pdf::open("paper.pdf")?;
let page = doc.page(0)?;
let text = page.text()?;
let words = page.extract_words()?;
let tables = page.extract_tables()?;
let md = page.to_markdown(true)?;
PdfPage で使えるメソッド:
text()、plain_text()、to_markdown(detect_headings)、to_html()extract_chars()、extract_words()、extract_lines()、extract_spans()extract_tables()、extract_paths()、extract_images()annotations()、render(format)search(term)— 範囲限定検索find_text_containing(substring)— ID 付き DOM レベルのヒットリスト
Node.js — Page
const { PdfDocument } = require("pdf-oxide");
const doc = new PdfDocument("paper.pdf");
const page = doc.page(0);
console.log(page.width, page.height, page.rotation); // キャッシュ済み
console.log(page.extractText());
const words = page.extractWords();
const tables = page.extractTables();
const md = page.toMarkdown();
PdfDocument は Symbol.iterator により for..of に対応し、doc.page(i) と doc.pageCount() も使えます。
これまでネイティブ側だけだった 6 メソッドが、TS 層を通じて Page と PdfDocument の両方で使えるようになりました:
extractWordsextractTextLinesextractTablesextractPathsgetEmbeddedImagesocrExtractText
各メソッドには async 版があります — extractTextAsync、toMarkdownAsync など。
Go — Page
doc, _ := pdfoxide.Open("paper.pdf")
defer doc.Close()
page, _ := doc.Page(0)
text, _ := page.ExtractText()
md, _ := page.ToMarkdown()
tables, _ := page.ExtractTables()
// すべてのページを反復
all, _ := doc.Pages()
for i, p := range all {
t, _ := p.ExtractText()
fmt.Printf("ページ %d: %d 文字\n", i, len(t))
}
Go の Page 構造体はフルセットを備えます: ExtractText、ToMarkdown、ToHtml、ToPlainText、ExtractWords、ExtractTextLines、ExtractTables、ExtractChars、ExtractPaths、Annotations、Images、Fonts、RenderPage、Search。
C# — Page
using PdfOxide;
using var doc = PdfDocument.Open("paper.pdf");
Page page = doc[0]; // または doc.Pages[0]、doc.Page(0)
string text = page.ExtractText();
string md = page.ToMarkdown();
Table[] tables = page.ExtractTables();
// async 版
string textAsync = await page.ExtractTextAsync();
string mdAsync = await page.ToMarkdownAsync();
doc.Pages の型は IReadOnlyList<Page>。すべての同期メソッドに CancellationToken 対応の async Task<T> 版があります。
構造化 Table の形
extract_tables()(PdfDocument と Page の両方で利用可能)は、言語をまたいで一貫した Table 型を返します:
| 言語 | 型 | セルへのアクセス |
|---|---|---|
| Rust | Table |
rows[i].cells[j] で反復 |
| Python | dict |
row["cells"][i]["text"] |
| Go | Table |
table.CellText(row, col) |
| C# | Table |
table.CellText(row, col) |
| Node.js | Table インターフェース |
table.cells[row][col] |
各セルはテキストに加えてバウンディングボックスを持つので、抽出結果をページ上の座標に紐づけられます。
doc.extract_*(page_index) からの移行
旧(引き続きサポート):
doc = PdfDocument("paper.pdf")
for i in range(doc.page_count()):
print(doc.extract_text(i))
print(doc.to_markdown(i, detect_headings=True))
print(doc.extract_tables(i))
新(v0.3.34 以降):
with PdfDocument("paper.pdf") as doc:
for page in doc:
print(page.text)
print(page.markdown(detect_headings=True))
print(page.tables)
どちらのスタイルもサポートされます。ページ単位のパイプラインでは Page スタイルの方が読みやすく、インデックス管理の手間が省けます。
関連ページ
- Python API リファレンス
- Rust API リファレンス
- Node.js API リファレンス
- Go API リファレンス
- C# API リファレンス
- テキスト抽出 — 基盤となる抽出メソッド
- 変更履歴 — v0.3.34 での Page API 導入