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] |
스타일이 적용된 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() 도 제공합니다.
이전에는 네이티브 전용이었던 여섯 개 메서드가 이제 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 도입