Skip to content

変更履歴

PDF Oxide のすべての注目すべき変更点をここに記録しています。


v0.3.38 – 2026-04-22

DocumentBuilder がすべてのバインディングに登場。書き込みパスでの AES-256、署名検証、マルチターゲット WASM、Go purego バックエンド

すべてのバインディングにわたる書き込み側 API の同等性 (#384)

  • DocumentBuilder + FluentPageBuilder + EmbeddedFont が Rust に加えて Python、Node/TypeScript、C#、Go、WASM でも利用可能になりました。埋め込みフォントによる CJK / キリル文字 / ギリシャ文字の完全サポートを備えた複数ページの構築が可能です。#382 を言語横断で解決します。
  • すべてのバインディングで 15 種類の注釈メソッド: link_url / link_page / link_namedhighlightunderlinestrikeoutsquiggly、付箋、スタンプ(標準 14 種類 + カスタム)、フリーテキスト、watermark(カスタム / DRAFT / CONFIDENTIAL)。
  • すべてのバインディングで 5 種類の AcroForm ウィジェット型: text_fieldcheckboxcombo_boxradio_grouppush_button
  • すべてのバインディングで グラフィックスプリミティブ: rectfilled_rectline
  • HTML+CSS パイプライン — すべてのバインディングでマルチフォントのカスケードに対応する Pdf.from_html_css(...)from_html_css_with_fonts(...)

書き込みパスでの AES-256 暗号化 (#386)

  • すべてのバインディングの DocumentBuilder における save_encrypted(path, user_pw, owner_pw) / to_bytes_encrypted(user_pw, owner_pw)
  • カスタムアルゴリズム + パーミッションのための Rust の save_with_encryption

本物のフォントサブセット化 (#385 / FONT-3b)

  • CJK 書体がフェイス全体ではなくサブセットとして埋め込まれるようになりました。約 17 MB の CJK フォントから構築した 5 文字の PDF は通常 100 KB 未満に収まります。コンテンツストリーム、/W 幅、ToUnicode CMap はサブセットの GID 空間に再キー付けされ、extract_text のラウンドトリップは変わりません。
  • 内部ライタ API の変更: EmbeddedFont::encode_string / encode_shaped_runVec<u16> を返し、build_embedded_font_objects は呼び出し側が ContentStreamBuilder::build_with_remappers に渡す GlyphRemapper を返します。高レベル API に変更はありません。

デジタル署名検証 (#208、検証部分)

  • すべてのバインディングにおける Signature.verify()Signature.verify_detached(pdf_bytes)(およびバインディングネイティブの同等物)。RFC 5652 §5.4 の署名者属性 + §11.2 の messageDigest チェック。
  • SHA-1 / SHA-256 / SHA-384 / SHA-512 上の RSA-PKCS#1 v1.5Valid / Invalid を返します。RSA-PSSECDSAUnknown / UnsupportedFeatureException として現れます。呼び出し側は依然として証明書を読み取り、独自のチェックを実行できます。
  • Certificatex509-parser による DER 検査(subject、issuer、シリアル、有効性、is_valid)— すべてのバインディング
  • Signature — 列挙 + 検査 + .get_certificate()すべてのバインディング
  • Timestamp — RFC 3161 TSTInfo の解析(時刻、シリアル、ポリシー、TSA 名、ハッシュアルゴリズム、メッセージインプリント)— すべてのバインディング
  • TsaClienttsa-client Cargo フィーチャーの背後でノンスと HTTP Basic 認証を伴う RFC 3161 HTTP POST — WASM を除くすべてのバインディング。WASM では意図的に組み込んでいません(ureq は wasm 非互換のため)。
  • DocumentEditor::set_producer / set_creation_date メタデータライタ。
  • render_page_regionrender_page_fit — クリップおよびフィットしたレンダリングサーフェス。
  • バイキュービック画像フィルタリング(pdf.js #19978 との同等性)— Multiply ブレンドオーバーレイを持つスキャン / 2 値ページが、縮小時にグレースケール範囲を潰さなくなりました。

署名自体(検証とは対照的に)は対象外です。その部分については #208 がオープンのままです。

マルチターゲット WASM パッケージング (#392)

  • pdf-oxide-wasmpackage.json の条件付きエクスポートにより、3 つのビルドを並行して提供するようになりました: nodejs/bundler/(Vite / webpack / Rollup / esbuild / Bun)、web/(ブラウザ / Deno / Cloudflare Workers)。
  • ブラウザバンドラ下でスローされる ReferenceError: Can't find variable: __dirname を修正します。
  • 手動ルーティング用のサブパスインポート(pdf-oxide-wasm/web/nodejs/bundler)が利用可能です。

Go バインディング — purego バックエンド + キャッシュディレクトリインストール

  • ebitengine/purego を介した 2 つ目のバックエンドが、実行時に libpdf_oxide.{so,dylib,dll}dlopen します。CGO_ENABLED=0 ビルドが動作するようになりました。 バックエンドの選択は自動です — //go:build cgo → 完全な CGo API、//go:build !cgo → purego。
  • Purego の対応範囲: PdfDocument のオープン(パス / バイト / パスワード)、ページ数、バージョン、テキスト / Markdown / HTML / プレーンテキスト抽出、フォント、注釈、ページ要素、検索、ページ寸法、ロギング、加えてテストフィクスチャ用の PdfCreator.FromMarkdown
  • CGo 専用(!cgo 下ではコンパイル時エラー): DocumentEditorDocumentBuilder、バーコード、署名、TSA、レンダリング、OCR、フォーム変更。
  • インストーラ: 新しい -shared フラグは staticlib の代わりに cdylib を取得し、エクスポート用に CGO_ENABLED=0 + PDF_OXIDE_LIB_PATH=… を出力します。
  • インストールディレクトリが os.UserCacheDir() に移動しました — ~/.cache/pdf_oxide(Linux)、~/Library/Caches/pdf_oxide(macOS)、%LocalAppData%\pdf_oxide(Windows)。Go 自身の GOCACHE 規約に一致します。
  • リリースアセットには、既存の staticlib アーカイブに加えて、すべての Tier-1 プラットフォーム向けの pdf_oxide-go-ffi-shared-<platform>.tar.gz が含まれるようになりました。

バグ修正

  • #395RenderPage が、ページに解析不能な署名フィールドメタデータが含まれていてもインタラクティブな署名ウィジェットがない場合に SignatureException を発生させなくなりました。@gevorgter によって報告されました。

謝辞

  • @sparkyandrew – #382(DocumentBuilder 経由の CJK)、#385(サブセッタ)。
  • @arthurlassagne – #392(ブラウザビルドの破損)。
  • @gevorgter – #395(RenderPage 署名例外)。

v0.3.37 – 2026-04-20

HTML + CSS → PDF (#248) — 初の信頼できる純粋 Rust パイプライン

新しい API — Pdf::from_html_css

let font = std::fs::read("DejaVuSans.ttf")?;
let pdf = Pdf::from_html_css(
    "<h1>Hello</h1><p>World</p>",
    "h1 { color: blue; font-size: 24pt }",
    font,
)?;
pdf.save("out.pdf")?;

HTML + CSS + フォントバイトを渡すと、ページ分割された PDF が返ってきます。純粋な Rust、MIT/Apache のみ(MPL の推移的依存関係なし)、extract_text のラウンドトリップはバイト単位で一致するため、生成された PDF は既存のテストインフラに組み込まれます。

提供された内容

  • フォントサブシステムType 0 / CIDFontType2 / Identity-H / ToUnicode の生成を伴う TTF/OTF 埋め込み。ラテン文字、キリル文字、ギリシャ文字、ヘブライ文字、アラビア文字が extract_text を介してラウンドトリップします。fontdb によるシステムフォント検出、rustybuzz によるテキストシェーピング。
  • 手書きの CSS エンジン(約 6,500 LoC、MPL 依存ゼロ)-- トークナイザ、パーサ、L3+L4 セレクタ(:is/:where/:not/:has)、マッチャ、カスケード、calc() / min() / max() / clamp()、循環検出付きの var()、型付きプロパティ値、at-rules(@media print:first/:left/:right/:blank を伴う @page@font-face@import@supports)、カウンタ、疑似要素コンテンツ。
  • HTML – HTML5 トークナイザ、フラットアリーナ DOM、スタイルシート抽出(<style><link rel="stylesheet">、インライン style="")、リソース抽出(<img> + srcset、<picture>/<source><a href>)。
  • レイアウト – Taffy ベースの block / flex / grid、UAX #14 行分割、マージン相殺、マルチカラム、テーブル(auto + fixed)。
  • ペイント – テキスト + ボーダー、rustybuzz による RTL、<a href>/Link 注釈、<img> data-URI → /XObject::before / ::afterpage-break-{before,after}: alwaysopacitytransform: translate*()<ul> / <ol> リストマーカー、DocumentBuilder::register_embedded_font による埋め込みフォント (#382)。

マルチフォントカスケード

  • Pdf::from_html_css_with_fonts(html, css, Vec<(family, bytes)>) — 任意の要素の CSS font-family が登録済みファミリに対して解決されます(大文字小文字を区別せず、引用符の有無を問わず、引用符なしの複数語に対応)。

コーナーケースパスでのバグ修正

  • Base-14 の太字テキストが太字でレンダリングされるようになりました(Tf /Helvetica-Bold に対するリソース辞書キーの不一致)。
  • TTC システムフォント(Helvetica.ttc、msgothic.ttc)が fontdbSource::SharedFile を介して解決されるようになりました。
  • 引用符なしの複数語 font-family が正しくトークン化されます。
  • Pdf::from_html_css ファクトリのメモリリークを解消しました(4 つの Box::leak 箇所をスコープ付きローカルに置き換え)。
  • PNG アルファ / ソフトマスク(SMask)がレンダリングされるようになりました。
  • シェイプ済みテキストが extract_text を介してラウンドトリップします(encode_shaped_run がグリフクラスタをソースのコードポイントにマッピングし直します)。
  • PdfWriter::finish が登録順にフォントを埋め込むようになりました(以前は HashMap によるランダム順)。
  • 埋め込みフォント名の衝突を、単調増加する EFn リソース名で分離しました。
  • fontdb の Mutex がフォントバイトの fs::read をまたいで保持されなくなりました。

対象外

CSS フィルタ、3D 変換、アニメーション、SVG-in-HTML(実用的な Rust SVG クレートはすべて MPL)、MathML、hyphens: autoshape-outside、JavaScript、フルマトリックス transform(scale/rotate)、グラデーション、box-shadow

ライセンス監査

cargo deny check licenses は MPL の推移的依存関係がゼロでパスします。Mozilla の CSS スタック(cssparserselectorshtml5everlightningcssstylo)はすべて MPL-2.0 です。v0.3.37 は pdf_oxide を完全に MIT/Apache の下に保つため、同等のものを手書きしています。

謝辞

  • @jmriebold – #248(「CSS サポート」)が、このリリースの HTML+CSS→PDF パイプライン全体の起点です。

v0.3.36 – 2026-04-19

Markdown 構造抽出 — タグ付き PDF の見出し/リスト出力、マルチカラムの読み取り順序、より安全な RTL 処理

Markdown 構造抽出 (#377)

to_markdown() は、フォントサイズのヒューリスティックから見出しレベルを、グリフ検出からリストマーカーを再導出する代わりに、/StructTreeRoot を Markdown パイプラインに直接組み込むようになりました:

  • /StructTreeRoot からの見出しとリストの出力。 すべてのスパンに付加される新しい StructRoleHeading(1..6)ListItemListItemLabelListItemBody)。Word でタグ付けされた文書は完全な見出し階層を復元し、リストは各ロール遷移で段落区切りを伴って - item を出力します。
  • ネストされた MCR を通じたロールの伝播。 H1 → Span → MCR および LI → LBody → Span → MCR のパターンが、InheritedContext { heading_level, list_role } を介して正しいセマンティックロールを持つようになりました。
  • /StructTreeRoot ブロック境界ごとに段落区切りを強制。 OrderedContent.block_id/P/H1..6/LI/Lbl/LBody/Sect/Div/Art/TR/TH/TD/Note/Reference/BibEntry/Code への各エントリでインクリメントされます。間隔の詰まったレイアウトがマージされなくなりました。
  • フォーム見出しの過剰断片化に対する同一ベースラインゲート — 同一ベースラインのスパンが 1 つの見出しに再結合されます。
  • マルチカラムの溝検出> max(3 × font_size, 30 pt) で区切られた同一ベースラインのスパンは、カラムをまたぐものとして扱われます。
  • 後方 x の読み取り順序折り返し検出 — カラム優先の読み取り順序(カラム 1 の最後のスパンが x=976 → カラム 2 の最初のスパンが同一ベースラインの x=192)が、結合する代わりに段落を区切るようになりました。
  • タグなし文書向けの幾何学的見出し + リストプレフィックス検出。 太字 + 5 % のサイズ増加で H4 に昇格します。新しい is_ordered_list_marker は、図のキャプションや年号を拒否しつつ、1. / 12. / a) / iv. / A. を認識します。

RTL テキスト — デフォルトで安全

  • アラビア文字の文脈依存グリフ周辺の不要な **bold** マーカーが除去されるようになりました(シェイプ遷移がフォントウェイト検出器を誤作動させていました)。
  • Bidi 並べ替えはデフォルトでオフです。 以前のドラフトはすべての RTL 行に対して unicode-bidi の視覚→論理の並べ替えを実行していましたが、これは以前は正しかった論理順序の PDF を壊していました(ヘブライ語の名前 בנימין が反転されていました)。並べ替えヘルパーは、入力が視覚順序である呼び出し側のために text::bidi::reorder_visual_to_logical に残っています。

Markdown 出力

  • インライン画像の base64 データ URI を 200 KB に制限。 高解像度の図を含む PDF は、以前は Markdown 出力を 10~20 倍に膨らませていました(1.9 MB の論文が 11.3 MB の Markdown を生成)。上限を超える画像は、元のサイズを示す HTML コメントのプレースホルダを出力します。ファイルベースの画像出力(image_output_dir)は影響を受けません。

実証的な影響

学術、政府、フォーム、新聞、技術、論文、IRS、pdfium、pdfjs、safedocs、低速コーパスのサブセットにまたがる 369 件の PDF 回帰について、v0.3.35 に対して検証しました:

  • 致命的な回帰は 0 件。
  • pdfium と pdftotext に対するトークン Jaccard: 中央値 1.000、106 フィクスチャ中 95 件で ≥0.95。
  • pymupdf4llm に対するトークン Jaccard: 中央値 0.978、106 フィクスチャ中 65 件で ≥0.95。
  • コーパス全体で pymupdf4llm より約 2 倍多くの見出しを出力。

謝辞

  • @Goldziherkreuzberg)-- 727 文書のベンチマーク手法と 9 件の再現用 PDF とともに #377 を提出。その枠組み(「TF1 は ±3 % 以内なのでテキストコンテンツは問題ない、構造が問題だ」)が調査全体を扱いやすくしました。

v0.3.35 – 2026-04-19

テキスト抽出における細いグリフのダブレット保存

テキスト抽出の正確性

  • 小さいフォントサイズで隣接する細いグリフのダブレットが潰れなくなりました (#378、PR #379)。 TextExtractor::deduplicate_overlapping_charsdeduplicate_overlapping_spans はハードコードされた 2 pt の絶対しきい値を使用していました。コンパクトなフォントの小さいサイズにおける細いグリフ(lrIi)では、グリフごとの送り幅が ≤ 2 pt に下がり(Helvetica の l は 9 pt で約 2.5 pt)、1 送り幅分離れた正当な隣接ダブレットが重複除去ウィンドウ内に入り、2 つのグリフのうち 1 つが静かに削除されていました。目に見える破損には controller → controlerbilled → biledwarranty → warrntyfollowing → folowingVIII → VII が含まれます。しきい値は各グリフ自身の advance_width に応じて min(advance_width * 0.30, 2.0) としてスケールするようになりました。調整可能な値は TextExtractor::DEDUP_OVERLAP_RATIO / DEDUP_OVERLAP_CAP_PT の関連定数に引き上げられました。

謝辞

  • @Hugues-DTANKOUO – 正確な根本原因分析とともに #378 を報告し、送り幅でスケールするしきい値とパラメータ化された回帰マトリックス(細いグリフ 4 種類 × 本文サイズ 3 種類)を備えた PR #379 を作成。

v0.3.34 – 2026-04-17

すべてのバインディングにわたるイディオマティックなページ API、構造化テーブル抽出

新機能

  • ページ API (#371) – Python、Node.js、C#、Go が PdfPage オブジェクトを公開するようになりました。for page in docfor (const p of doc)foreach (var p in doc.Pages)、または doc.Pages() で反復処理し、doc[i]doc.page(i)doc[i]、または doc.Page(i) でインデックスアクセスします。各ページは遅延評価の textmarkdown()html()wordslinestablesimagespathsannotationssearch() などを公開します。
  • 構造化テーブル抽出 (#289)extract_tables()(Python)、ExtractTables()(C#/Go)、extractTables()(Node.js)は、Markdown だけでなく、テキストとバウンディングボックスを伴う行とセルを返すようになりました。PdfDocument と新しい PdfPage の両方で利用可能です。
  • Node.js の同等性extractWordsextractTextLinesextractTablesextractPathsgetEmbeddedImagesocrExtractText が TypeScript 層に組み込まれました(以前はネイティブ専用)。
  • ExtractedTableTable – Rust コアのリネーム。冗長な Extracted プレフィックスが削除されました。FFI 向けの型が更新されました。

テキスト抽出品質

  • 混在レイアウトページでの XY-cut カラム検出 (#319)is_multi_column_page のガードが、カラムごとに少なくとも 15 スパンを要求するように厳格化されました。カラム順に並べられたスパンは、extract_text の行認識ソートで再ソートされなくなりました。

謝辞

  • ページファースト API (#371) を提案してくれた @SeanPedersen。構造化テーブル抽出 (#289) をリクエストしてくれた @pdenapo

v0.3.33 – 2026-04-16

テキスト抽出、画像の正確性、メモリ安全性の修正

バグ修正

  • ToUnicode CMap ミス (#363) – サブセット Type0 フォントは、ToUnicode CMap に CID が欠けている場合、Identity-H の暗号文(例: %B+$%8A//$2*%01*1%6APP)に陥る代わりに、U+FFFD を出力するようになりました。
  • 単語内 TJ カーニングが単語を分割しなくなりました (#365) – 単一単語内の 0.10~0.20 em の文字ペアカーニング([(diffe) -150 (rent)])がスペース挿入をトリガーしなくなりました。
  • キリル文字 UTF-8 文字化けの回復 (#317) – ラテン文字のみのエンコーディングと生の UTF-8 バイトシーケンスを持つフォントが正しくデコードされるようになりました。
  • FlateDecode 部分回復がゴミ出力を拒否 (#364) – コンテンツストリームが解凍の途中で失敗する MS Reporting Services の PDF が、128 バイトの疑似ランダムデータを返さなくなりました。
  • Indexed + ICCBased パレット (#373) – Indexed ベース配列内の未解決の ICC ストリーム参照が、CMYK の 4 ではなく /N をデフォルトで 3 にしなくなり、斜めストライプのアーティファクトを修正しました。@Charltsing によって報告されました。
  • Lab ベースの Indexed パレット → sRGB (#337) – CIE L*a*b* パレットバイトが、生の RGB として再解釈される代わりに、Lab→XYZ→sRGB に変換されるようになりました。

メモリとパフォーマンス

  • すべての内部キャッシュに上限を設定 (PR #369、#354) – オブジェクトキャッシュ(64 MB)、フォントキャッシュ(256~512 エントリ)、XObject スパン/画像キャッシュ(1024 エントリ)、グローバル CMap キャッシュ(1024 エントリ)が FIFO エビクションを使用するようになりました。
  • チャート中心の PDF でのパス抽出 OOM を修正 (#369) – CTM を認識する XObject 重複除去を追加し、同じ位置の同じ XObject は重複除去されますが、異なる位置の同じ XObject は別々に処理されます。
  • Mutex ポイズン耐性MutexExt::lock_or_recover() が 72 箇所の .lock().unwrap() 呼び出しを置き換えます。

依存関係

  • RustCrypto cipher 0.5 エコシステム(PR #352、#295、#291): aes 0.8→0.9、cbc 0.1→0.2、sha2/sha1/md-5 0.10→0.11。

テストスイート

  • 13 件のデッド/古い無視テストを削除。3 件の以前は無視されていたテストを修正。上記のすべてのバグ修正に対して回帰テストを追加。スイートは現在 6,300 件合格、0 件失敗、228 件無視。

謝辞

  • Indexed + CMYK 画像抽出のバグ報告 (#373) をしてくれた @Charltsing
  • 複数ページ抽出中の無制限なメモリ増加 (#354) をプロファイリングしてくれた @ddxtanx
  • PR #369(上限付き FIFO キャッシュ、CTM 認識 XObject 重複除去、MutexExt ポイズン回復トレイト、Python バインディングの堅牢化)の @andrewjradcliffe

v0.3.32 – 2026-04-15

Windows-x64 Go FFI tarball のリリースパイプライン修正

リリースパイプライン

  • v0.3.31 のリリースを失敗させていた x86_64-pc-windows-gnu ネイティブライブラリビルドを修正scripts/shrink-staticlib.sh はすべてのアーカイブメンバに対して objcopy --strip-debug を実行していましたが、MinGW クロスコンパイルツールチェーンは DWARF セクションのみを含む分割デバッグ .dwo メンバを出力します。ストリッピング後、メンバにはセクションが残らず、objcopy がアーカイブ全体を中断していました。修正: objcopy を呼び出す前に ar d.dwo アーカイブメンバを削除します。Rust、Python、Node、WASM、C# のアーティファクトに機能的な変更はありません。このリリースは、Windows-x64 の Go インストールパスをアンブロックすることだけを目的として存在します。

v0.3.31 – 2026-04-13

バグ修正、Go ビルドの変更、リリースインフラの改善

バグ修正

  • Xref 回復 – 誤ってフラグが立てられた空きページオブジェクトと、数バイトずれた xref オフセットエントリの回復を修正しました。

破壊的変更

  • Go ネイティブライブラリ – ネイティブライブラリは go/lib/ にコミットされなくなりました。利用者はマシンごとに一度 go run github.com/yfedoseev/pdf_oxide/go/cmd/install@latest を実行する必要があります。

リリースインフラ

  • Rust staticlib を 63% 縮小(71 MB から 26 MB)、npm .node アドオンをストリップ、npm からソースマップを削除、クレート sdist のリークを修正、NuGet snupkg パッケージングを厳格化。

v0.3.27 – 2026-04-12

Go staticlib、Node.js ネイティブバインディング、C# NativeAOT、OCR FFI、主要なバグ修正

新機能

  • Go staticlib への移行 – 自己完結型の Go バイナリのために cdylib から staticlib に切り替え。
  • Node.js ネイティブバインディング – napi-rs スタイルの配布によるプリビルドのプラットフォームサブパッケージ。
  • C# LibraryImport – NativeAOT 互換性のため、881 件の P/Invoke 宣言を DllImport から LibraryImport に移行。
  • OCR FFI ブリッジ – OCR サポートが Go、C#、Node.js バインディングで利用可能になりました。
  • 回帰ハーネス – 自動品質テスト用の 60-PDF キュレーション済みコーパス。

バグ修正

  • Indexed 色空間画像、AES-256(V=5、R=6)暗号化、単一カラムおよび表形式コンテンツの読み取り順序、アラビア語テキスト抽出、単語分離、フォント幅フォールバック、オブジェクトキャッシュの無効化、レンダリングの改善。

v0.3.24 – 2026-04-09

JavaScript/TypeScript、Go、C# 向けの公式バインディング

新機能

  • JavaScript/TypeScript バインディング – 完全な API カバレッジで npm に公開。
  • Go バインディング – 完全な API サーフェスを備えたネイティブ Go パッケージ。
  • C# バインディング – NuGet に公開された .NET パッケージ。
  • C FFI 層 – 共有の pdf_oxide.h ヘッダを伴う 270 以上の extern "C" 関数。
  • グローバルログレベル制御 – すべてのバインディングで設定可能。

v0.3.23 – 2026-04-09

重大な安定性修正

バグ修正

  • 回転した dvips PDF からの退化した CTM を持つページでの SIGABRT を修正。
  • 保存時に画像/XObject が削除される問題を修正。
  • 一般的なフォントがないシステムでの文字化けレンダリングを修正。
  • フォームフィールドのページインデックスが常に 0 を返す問題を修正。

v0.3.22 – 2026-04-08

スレッドセーフな文書、非同期 Python、フリースレッド Python、単語/行分割のチューニング

新機能

  • スレッドセーフな PdfDocument – Mutex による Send + Sync(RefCell を置き換え)。
  • 非同期 Python APIAsyncPdfDocumentAsyncPdfAsyncOfficeConverter
  • フリースレッド Pythoncp314t(GIL なしビルド)のサポート。
  • 分割しきい値 – 単語/行検出のチューニングのための word_gap_thresholdline_gap_thresholdprofile

バグ修正

  • CLI の分割/結合の空白ページ、不正な形式の画像のレンダリングスキップ、構造ツリーのサイクル SIGSEGV、テーブル戦略のゲーティング。

パフォーマンス

  • 構造ツリーと解凍済みコンテンツストリームをキャッシュ、O(1) MCID ルックアップ、O(log n) ページツリートラバーサル、遅延ページツリー生成。

v0.3.21 – 2026-04-04

マルチアーキテクチャ Python ホイール、ログレベルの修正

バグ修正

  • ログレベルが Python で完全に尊重されるようになりました(マクロが log クレートに転送されます)。

新機能

  • マルチアーキテクチャ Python ホイール – Linux aarch64、musl x86_64/aarch64、Windows ARM64。glibc 要件を 2_28 に引き下げ。

v0.3.20 – 2026-04-04

主要なテーブル抽出の書き直し、テキスト品質の改善、デフォルトでのサイレントロギング

新機能

  • テーブル抽出エンジンの書き直し – 交差パイプライン、テキストエッジ検出、拡張グリッド、カラム認識テキスト検出、点線/破線の再構成、ハイブリッド行検出。
  • テキスト抽出品質 – 隣接する値の間隔、分割された小数の結合、太字スパンの統合、HTML 見出し階層、ラベルと値のペアリング、カラムグループのマージ。
  • サイレントロギング – ロギングがすべてのバインディングでデフォルトでサイレントになりました。Python のログは pyo3-log を介して logging モジュールを流れます。

バグ修正

  • 暗号化された PDF の明確なエラーメッセージ、ObjStm/XRef ストリームの復号、ストリームパーサの末尾改行処理。

v0.3.19 – 2026-04-02

シングルコールのページ抽出、カラム認識の読み取り順序、文字単位のバウンディングボックス

新機能

  • extract_page_text() – 効率化されたページ抽出のためのシングルコール DTO。
  • カラム認識の読み取り順序 – マルチカラム文書のための XY-Cut 空間分割。
  • 文字単位のバウンディングボックス – 正確な文字位置決めのためにフォントメトリクスから導出。
  • is_monospace フラグTextSpanTextChar で利用可能。
  • Pdf::from_bytes() – すべてのバインディングにわたる新しいコンストラクタ。
  • パス操作 – Python バインディングの extract_paths()

バグ修正

  • マルチバイトデバッグログでの UTF-8 パニック、Markdown の間隔、Form XObject /Matrix、回転テキストマトリックス、プレスキャン CTM の損失、重複除去、Tm スケールテキストのドロップ、Markdown の単語マージ、CLI 結合の空白文書。

破壊的変更

  • WASM – JSON フィールド名が camelCase を使用するようになりました。

v0.3.18 – 2026-04-01

レンダリングエンジンのオーバーホール、新しい Python および WASM API、バッテリー同梱の Python

新機能

  • レンダリングエンジンのオーバーホール – 正確な文字間隔、埋め込みフォントサポート、標準フォントメトリクス、塗りつぶしとストローク、クリップパス、グラデーションシェーディング、アルファ透過、ステンシル画像マスク、ページ回転、分版色空間。
  • 新しい Python APIvalidate_pdf_avalidate_pdf_uavalidate_pdf_xextract_pagesdelete_pagemove_pageflatten_to_images、パスワードコンストラクタ、merge
  • 新しい WASM APIvalidatePdfAdeletePageextractPagessave、パスワードコンストラクタ、merge
  • バッテリー同梱の Python – レンダリング、並列、署名、Office 変換がデフォルトで有効。

バグ修正

  • 退化した CTM の中断、FlateDecode の flate ボム保護(256 MB の上限)、クリッピングスタックの同期。

v0.3.17 – 2026-03-08

テーブル検出の改良、タグ付き PDF の最適化

改善

  • テーブル検出の改良 – 2 つ以上のカラムを必要とし、偽陽性を削減。
  • タグ付き PDF 抽出パイプラインの最適化。

バグ修正

  • 再帰的な Form XObject 処理での RefCell already borrowed パニックを修正。

v0.3.16 – 2026-03-08

スマートハイブリッドテーブル抽出、Python 型スタブ、pathlib サポート

新機能

  • スマートハイブリッドテーブル抽出 – Union-Find クラスタリング、視覚的線分析、視覚的スパン/ヘッダ。
  • プロフェッショナルな ASCII テーブル – ターミナル出力のための複数行折り返し。
  • Python 型スタブ – mypy stubgen を介して自動生成。
  • Python PdfDocumentpathlib.Path を受け入れ、コンテキストマネージャをサポート。

バグ修正

  • ネストされた Form XObject でのセグフォルト、Python の座標スケーリング、ASCII テーブルの UTF-8 パニック。

v0.3.15 – 2026-03-06

ヘッダ/フッタ管理、ページテンプレート、スコープ付き抽出

新機能

  • ヘッダ/フッタ管理 API – PDF アーティファクトの追加、削除、編集。
  • ページテンプレート – ページ番号付け、日付などの動的プレースホルダ。
  • スコープ付き抽出 – フィルタリングされた出力のために erase_regions を尊重。
  • PdfDocument.from_bytes() – 新しい Python コンストラクタ。

バグ修正

  • マルチカラムの読み取り順序(XY-Cut)、フォントアイデンティティの衝突、Lines テーブル戦略の偽陽性。

v0.3.14 – 2026-03-03

高レベルレンダリング、単語/行抽出、幾何学的プリミティブ、ハイブリッドテーブル

新機能

  • 高レベルレンダリング API – Rust、Python、WASM での Pdf::render_page
  • 単語と行の抽出 – すべてのバインディングにわたる extract_wordsextract_text_lines
  • 幾何学的プリミティブ抽出extract_rectsextract_lines
  • ハイブリッドテーブル検出 – ベクトル線のヒントがテーブル境界検出を改善。
  • API の調和 – 流暢な .within(page, rect) パターン。
  • CLI コマンド--area フィルタリングを伴う renderpaths コマンド。

バグ修正

  • OCR フィーチャーゲーティングの発見、XObject スパンキャッシュのポイズニング、V=4 暗号フィルタ、暗号化された CIDToGIDMap。

v0.3.13 – 2026-03-02

CJK テキスト抽出の修正

バグ修正

  • CJK/Type0 フォントの extract_chars でのマルチバイトデコード、文字位置決め精度の改善、文字間隔のスケーリング。

v0.3.12 – 2026-03-01

テキスト抽出品質、Markdown 変換、パフォーマンス

改善

  • テキスト抽出品質 – CID フォント幅の計算、フォント変更時の単語境界検出、非標準 CID マッピングのフォールバック、RTL テキストの方向性。
  • Markdown 変換 – XY-Cut 再帰的空間分割、見出し検出、リスト再構築。

パフォーマンス

  • ゼロコピーのページツリートラバーサル、構造ツリーのキャッシュ、BT オペレータのアーリーアウト、より大きな I/O バッファ、xref 再構築しきい値の削除。

v0.3.10 – 2026-02-26

並列抽出、WASM/JavaScript サポート、バッチ処理、テキスト品質の改善

新機能

  • WASM/JavaScript サポート – wasm-bindgen を介した WebAssembly バインディング。完全なテキスト抽出、PDF 作成、編集、フォームフィールド、検索がブラウザと Node.js で利用可能。pdf-oxide-wasm として npm に公開。

  • 並列ページ抽出 – rayon ベースのマルチスレッド抽出を伴う新しい parallel フィーチャーフラグ。ParallelExtractor がページをワーカースレッドに分散します。グローバルフォントキャッシュがフォントを一度だけ解析することを保証します。

  • バッチ処理 API – 進捗コールバックとエラー収集を伴う複数 PDF ワークフロー向けの新しい BatchProcessor。順次処理と並列処理の両方をサポート。

  • OCR ハイブリッド検出 – インテリジェントな OCR フォールバックのためのマルチヒューリスティック検出を伴う新しい PageType enum(NativeTextScannedPageHybridPage)。

  • 完全な WASM/Python API の同等性 – WASM および Python バインディングにわたる 10 の新しいメソッドグループ: フォームフィールドの get/set、画像バイト抽出、画像からの PDF、フォームのフラット化、PDF の結合、ファイル埋め込み、ページラベル、XMP メタデータ。

バグ修正

  • 循環 XObject セグフォルト – 画像抽出中の循環 Form XObject 参照からのセグフォルトを修正
  • XRef /Prev チェーンのオーバーフロー – XRef /Prev チェーンの解析を再帰からサイクル検出付きの反復に書き直し
  • 壊れたリガチャテキストrepair_ligatures() ポストプロセッサが LaTeX PDF からの破損テキストを修正
  • テキスト抽出品質 – 注釈テキスト抽出、リーダードットの正規化、Priority 3 CMap サポート
  • テーブル抽出 – 結合セル、複数行のセルコンテンツ、フォントベースのヘッダ検出
  • フォームフィールドの永続化 – 増分保存がフォームフィールド値の変更を正しく永続化するようになりました

パフォーマンス

  • 画像のみページのスキップpage_cannot_have_text() の事前チェックが、フォントを含まないページの解凍をスキップ
  • SmallVec オペレータオペランド – スタック割り当てのオペランドがオペレータごとのヒープ割り当てを排除
  • クロスドキュメントフォントキャッシュ – すべての PdfDocument インスタンスで共有されるプロセスレベルの LRU フォントキャッシュ

v0.3.9 – 2026-02-24

20 以上のマイクロ最適化 – テキスト抽出が 40% 高速化

パフォーマンス

  • O(n^2) 文字列連結の修正 – 最後に結合される事前割り当て済みの Vec<&str> が、二次的な String::push_str() の蓄積を置き換え
  • 画像のみのコンテンツストリームパーサ – テキストとグラフィックスオペレータをスキップする extract_images() の新しい高速パス(3~5 倍高速)
  • フィンガープリントベースのフォントキャッシュ – 完全な構造体比較の代わりに、encoding+widths+flags のハッシュによるフォントアイデンティティ
  • ストリーミングパーサ – コンテンツストリームオペレータを Vec に収集する代わりにストリーミング
  • BT/ET の高速インラインパーサ – 一般的なテキストオペレータの直接バイトマッチング
  • バイトから文字へのルックアップテーブル – ホットパスの HashMap を 256 エントリのルックアップが置き換え
  • 幅ルックアップテーブル – グリフ幅のために固定サイズ配列が HashMap を置き換え
  • Operator enum の縮小 – 大きなバリアントのボクシングにより 112 から 40 バイトに(64% 小型化)
  • zlib-rs バックエンド – zlib-ng ポートによりストリーム解凍が 15~25% 高速化

バグ修正

  • 埋め込みプログラムを伴うフォントエンコーディング – PDF 仕様に従った正しいベースエンコーディングの解決
  • 補助 Unicode(U+10000+) – 補助コードポイントの切り捨てを修正
  • StandardEncoding リガチャマッピング – Adobe Glyph List を介した正しい fi、fl、ff、ffi、ffl マッピング
  • 康熙部首の正規化 – 完全な U+2F00-U+2FD5 マッピングテーブル
  • RTL テキストの文字順序 – アラビア語/ヘブライ語が論理的な読み取り順序で抽出
  • マルチカラムテキストの分離 – ギャップ分析による改善されたカラム検出

機能

  • extract_all_text() – 全ページテキスト抽出のための新しい便利メソッド
  • StructElem の source_role – ロールマッピング前の元の PDF ロール名を保存

v0.3.8 – 2026-02-20

テキスト専用パーサ – グラフィックス中心のページが 10~30 倍高速化

パフォーマンス

  • テキスト専用コンテンツストリームパーサ – 新しい parse_content_stream_text_only() 高速パスが、完全な nom 解析の代わりにバイトレベルのスキャンを使用して、BT/ET ブロック外のグラフィックスオペレータをスキップ
  • バイトレベルのグラフィックススキャナ – 生のインデックス演算が nom ベースのオペランドループを置き換え、ほぼ memcpy 速度で処理
  • 色オペレータのスキップ – 12 個の色オペレータをバイトレベルのスキップリストに追加
  • q/cm/Q 出力の遅延 – テキストが確認されるまでグラフィックス状態オペレータを遅延し、バックトラックオーバーヘッドの約 75% を排除
  • Arc ラップ FontInfo キャッシュ – キャッシュヒット時の完全な FontInfo 構造体のクローンを回避
  • O(n) ページマップ構築 – シングルパストラバーサルが再帰的降下を置き換え
  • XObject 名から参照へのキャッシュ – XObject 中心のページでの O(n^2) 辞書クローンを排除

v0.3.7 – 2026-02-19

テキスト抽出品質: 95.7% から 99.6% のクリーン率へ

検証済み – 3,829-PDF コーパス

メトリック v0.3.6 v0.3.7 変化
クリーン率 95.7% 99.6% 3,829 件中 3,812 件の PDF
問題のある PDF 165 17 -90%

追加 – パーサ & デコーダ

  • BrotliDecode ストリームフィルタ(PDF 2.0)-- Brotli 圧縮ストリーム用の新しいデコーダ
  • Xref トレーラの選択 – 複数のトレーラが存在する場合の正しいトレーラ選択
  • ヘッダなし PDF の回復%PDF- ヘッダが欠落している場合に最初のオブジェクトマーカーを検索

追加 – フォントエンコーディング

  • CFF フォントエンコーディングパーサ – 文字エンコーディングのために CFF/OpenType フォントプログラムを解析
  • Type1 フォントエンコーディングパーサ – グリフマッピングのために埋め込み Type 1 フォントプログラムを解析
  • 80K 以上の CID から Unicode へのマッピング – Adobe-CNS1、Adobe-GB1、Adobe-Japan1、Adobe-Korea1 を拡張
  • Shift-JIS/RKSJ デコード – 日本語 Shift-JIS エンコードの CMap ストリームサポート
  • Identity-H cmap の伝播 – CIDFont 子孫からの TrueType cmap テーブルの伝播

修正 – テキスト抽出パイプライン

  • Tf バッファフラッシュ – テキストの損失を防ぐためフォント切り替え時に保留中のテキストをフラッシュ
  • 適応的スペースしきい値 – 固定の 0.25em しきい値を bbox ベースの間隔に置き換え
  • スパン重複除去 – 太字/影効果のためにレンダリングされた重複スパンを重複除去
  • 文字重複除去 – 同じ行の 2pt 以内の重複文字を削除
  • BT オペレータチェックの削除 – 有効なテキストブロックをスキップしていた不正な検証を修正
  • ByteMode デコード – 適切な 1 バイト、2 バイト、可変幅文字コードのデコード
  • 注釈テキスト抽出 – Widget、FreeText、外観ストリームからテキストを抽出

v0.3.6 – 2026-02-16

10 倍高速 – 2 つの O(n) ボトルネックを排除

パフォーマンス

  • 一括ページツリーキャッシュ – 最初のページアクセス時に、ページツリー全体が一度走査され、すべてのページがキャッシュされます。以前は get_page() がキャッシュされていない各ページに対してルートからトラバースし、ページごとに O(n)、順次アクセスで合計 O(n^2) になっていました。現在は単一の O(n) 走査の後、ページごとに O(1) です。10,000 ページの veraPDF テストファイルが 55,667ms から 332ms になりました(168 倍高速)。

  • オブジェクトスキャンオフセットキャッシュ – オブジェクトが xref テーブルから欠落している場合、scan_for_object() は以前、欠落したオブジェクトごとに PDF ファイル全体を読み取っていました。xref にない数百の構造ツリー要素を持つタグ付き PDF は、数百回のファイル全体読み取りをトリガーしていました。現在はファイルが一度スキャンされ、すべてのオブジェクトオフセットがキャッシュされます。10 ページのタグ付き PDF が約 10 秒から 68ms になりました(146 倍高速)。571 フォントを持つ 154 ページの学術 PDF が約 18 秒から 405ms になりました(44 倍高速)。

  • シングルパステキスト抽出extract_spans() は 2 つのパス(文書タイプの分類、それから抽出)を実行しなくなりました。分類パスは完全に排除されました。適応的なフォント認識しきい値が、単一のパスで同等以上の結果を生成するようになりました。

  • コンテンツストリーム Vec の事前割り当てparse_content_stream() がストリームサイズに基づいてオペレータ Vec の容量を事前割り当てし、大きなコンテンツストリームの再割り当てを削減します。

検証済み – 3,830-PDF コーパス(v0.3.5 から v0.3.6)

メトリック v0.3.5 v0.3.6 変化
合格率 99.8% 99.8% 3,830 件中 3,823 件の有効な PDF
低速(>5s) 2 0 排除
平均 23.3ms 2.1ms -91%
p50 0.6ms 0.6ms
p90 3.0ms 2.6ms -13%
p99 33.2ms 18.0ms -46%
最大 68,722ms 625ms -99%
合計(全 PDF) 89.1s 8.0s -91%

テキスト出力は 11 件の PDF(抽出されたテキスト 862 KB)でバイト単位で同一であることが検証されました。4 件の PDF で適応的間隔による抽出品質の向上が見られました。


v0.3.5 – 2026-02-15

パフォーマンス、3,830-PDF の安定性、エラー回復

パフォーマンス

  • ページをまたぐフォントキャッシュ – ObjectRef でキー付けされた文書レベルのフォントキャッシュが、すべてのページで共有フォントの再解析を回避
  • ページオブジェクトキャッシュget_page() が解決されたページオブジェクトをキャッシュし、複数ページ抽出での繰り返しのページツリートラバーサルを排除
  • 構造ツリーキャッシュ – 構造ツリーの結果が最初のアクセス後にキャッシュされ、すべての extract_text() 呼び出しでの冗長な解析を回避
  • BT オペレータのアーリーアウト – テキスト抽出が、BT(Begin Text)オペレータを含まない画像のみのページの完全なパイプラインをスキップ
  • 大きなファイル向けのより大きな I/O バッファ – 100 MB を超えるファイルで BufReader の容量を 8 KB から 256 KB に増加
  • Xref 再構築しきい値の削除 – オブジェクトが少ない有効なポートフォリオ PDF でファイル全体の再構築をトリガーしていたヒューリスティックを排除

検証済み – 3,830-PDF コーパス

  • veraPDF(2,907)、Mozilla pdf.js(897)、SafeDocs(26)にまたがる 3,830 件の PDF で 100% の合格率
  • タイムアウトゼロ、パニックゼロ
  • p50 = 0.6ms、p90 = 3.0ms、p99 = 33ms

追加 – 暗号化

  • オーナーパスワード認証 – R<=4 用のアルゴリズム 7、R>=5 用のアルゴリズム 12
  • SASLprep を伴う R>=5 ユーザーパスワード検証 – SHA-256 を使用した完全な AES-256 パスワード検証
  • パブリックパスワード認証 APIPdf::authenticate(password)PdfDocument::authenticate(password)

追加 – PDF/A 準拠検証

  • XMP メタデータ検証pdfaid:partpdfaid:conformance エントリをチェック
  • 色空間検証 – 出力インテントなしのデバイス依存色オペレータについてページコンテンツストリームをスキャン
  • AFRelationship 検証 – PDF/A-3 埋め込みファイル仕様の検証

追加 – PDF/X 準拠検証

  • XMP PDF/X 識別pdfxid:GTS_PDFXVersion を検証
  • ページボックス関係の検証 – BleedBox 内の TrimBox、MediaBox 内の BleedBox
  • ExtGState 透過検出 – SMask、CA/ca、BM のチェック
  • デバイス依存色検出 – サポートされていない色空間にフラグを立てる
  • ICC プロファイル検証 – ICCBased プロファイルストリームを検証

追加 – レンダリング

  • 仕様に準拠したクリッピング – q/Q の保存/復元にスコープされたクリップ状態
  • グリフ送り幅の計算 – PDF 仕様セクション 9.4.4 に準拠
  • Form XObject レンダリング – /Matrix 変換を解析し、フォームの /Resources を使用

修正 – エラー回復(28 以上の実世界 PDF)

  • 欠落したオブジェクトは PDF 仕様セクション 7.3.10 に従って Null に解決
  • 異常なバージョン文字列に対する寛容なヘッダバージョン解析
  • 非標準の暗号化アルゴリズムマッチング(V=1、R=3 の組み合わせ)
  • 辞書以外の Resources はエラーにせず空として扱う
  • ページツリーの Null ノードを優雅にスキップ
  • 破損したコンテンツストリームはエラーではなく空のコンテンツを返す
  • /Resources+/Parent ヒューリスティックによる拡張ページツリースキャン

修正 – DoS 保護

  • ページ数を PDF 仕様 Annex C.2 の制限(8,388,607)に対して検証

修正 – 画像抽出

  • Do オペレータを介したコンテンツストリーム画像抽出
  • サイクル検出を伴うネストされた Form XObject 画像
  • インライン画像(BI…ID…EI シーケンス)
  • 画像位置決めのための CTM 変換
  • ColorSpace 間接参照の解決

修正 – パーサの堅牢性

  • 複数行のオブジェクトヘッダ(Google 生成 PDF で使用される 1 0\nobj 形式)
  • ヘッダ検索を 1024 から 8192 バイトに拡張
  • 不正な形式のヘッダに対する寛容なバージョン解析

修正 – ページアクセスの堅牢性

  • /Contents のないページは空のコンテンツを返す
  • 循環ページツリー検出がスタックオーバーフローを防止
  • Null ストリーム参照を優雅に処理
  • /Type エントリのないページは /MediaBox または /Contents キーで発見

修正 – 暗号化の堅牢性

  • サイズ不足のキーでの AES 復号はパニックではなくエラーを返す
  • 不正な形式のエントリに対する Xref ストリーム解析の堅牢化
  • 解析前に間接的な /Encrypt 参照を解決

修正 – コンテンツストリーム処理

  • 裸の辞書のための Dictionary-as-Stream フォールバック
  • 省略形のフィルタ名(AHx、A85、LZW、Fl、RL、CCF、DCT)
  • コンテンツストリームオペレータ制限(デフォルト 1,000,000)

修正 – コード品質

  • 構造ツリーの間接オブジェクト参照を解析時に解決
  • Lexer の R/RG トークンの曖昧性解消
  • ストリームの空白トリミングがバイナリデータから NUL バイトやスペースを削除しなくなりました

テスト

  • 以前は無視されていた 8 件のテストを無視解除して修正

削除

  • 空の PdfImage スタブ(抽出は ImageInfo を使用)
  • コメントアウトされた DocumentType::detect() テストブロック

v0.3.4 – 2026-02-12

解析の堅牢性、文字抽出、XObject パス

破壊的変更

  • parse_header() のシグネチャが、バイトオフセットを含めるために (u8, u8) から (u8, u8, u64) に変更

修正 – PDF 解析の堅牢性(Issue #41)

  • バイナリプレフィックスまたは BOM ヘッダを持つ PDF が正常に開くようになりました
  • ヘッダ検索が最初の 1024 バイトから %PDF- マーカーをスキャン
  • UTF-8 BOM、メールヘッダ、その他の先頭バイナリデータをサポート
  • 寛容モードは実世界の不正な形式の PDF を処理。準拠テスト用の厳格モード

追加 – 文字レベルのテキスト抽出(Issue #39)

  • extract_chars() が文字単位の位置決めを伴う Vec<TextChar> を返す
  • 変換マトリックス、回転角度、送り幅を含む
  • 重複文字の重複除去を伴って読み取り順序でソート
  • 文字のみのユースケースでスパン抽出より 30~50% 高速
  • Rust と Python の両方の API で公開

追加 – XObject パス抽出(Issue #40)

  • extract_paths() が Do オペレータを介して Form XObject を再帰的に処理
  • /Matrix を介した座標変換が適切に適用される
  • グラフィックス状態が適切に分離される(保存/復元)
  • 重複 XObject 検出が無限ループを防止
  • ネストされた XObject をサポート

変更

  • nom パーサライブラリを 7.1 から 8.0 にアップグレード

v0.3.3 – 2026-02-11

CJK サポート、構造ツリーの拡張、準拠の基盤

v0.2.5 と v0.2.6 のすべての変更を統合リリースとして含みます。

ハイライト

  • TagSuspect/MarkInfo サポート – 文書カタログから MarkInfo 辞書を解析
  • CJK テキスト用の Word Break /WB 構造要素
  • Adobe-GB1(簡体字中国語)、Adobe-Japan1(日本語)、Adobe-CNS1(繁体字中国語)、Adobe-Korea1(韓国語)の 定義済み CMap サポート
  • 省略形展開 /E サポート
  • CIDFont グリフ幅のための Type 0 /W 配列の解析
  • ソフトハイフン(U+00AD)処理の修正
  • サブタイプサポートを伴う拡張アーティファクトフィルタリング
  • HTML および Markdown 出力での 画像埋め込み(base64 データ URI)
  • embed_images=falseimage_output_dir を伴う 画像ファイルエクスポート
  • PdfImage::to_base64_data_uri()to_png_bytes() メソッド

v0.3.2 – 2026-02-01

編集、暗号化、文書セキュリティ

追加 – PDF 編集

  • 既存の PDF を変更するための DocumentEditor
  • 完全な注釈サポート(テキストマークアップ、図形、スタンプ、インク、ファイル添付、墨消し)
  • インタラクティブなフォームフィールド作成(テキスト、チェックボックス、ラジオ、ドロップダウン、リスト、ボタン)
  • フォームのフラット化
  • リンク注釈(URL、内部ページナビゲーション)
  • アウトライン/ブックマークビルダ
  • PDF レイヤ(Optional Content Groups)

追加 – 暗号化

  • 書き込み時の暗号化(AES-256、AES-128、RC4-128、RC4-40)
  • パーミッション制御(印刷、コピー、変更、注釈)
  • EncryptionAlgorithmPermissions を伴う EncryptionConfig ビルダ
  • デジタル署名の基盤

v0.3.1 – 2026-01-14

フォームフィールド、マルチメディア、作成ツール、検索

追加 – PDF 作成

  • Pdf::from_markdown()Pdf::from_html()Pdf::from_text()Pdf::from_image()
  • メタデータとレイアウト設定のための PdfBuilder 流暢パターン
  • プログラムによる PDF 生成のための DocumentBuilder
  • TableRenderer によるテーブルレンダリング
  • グラフィックス API: 色、グラデーション、パターン、ブレンドモード、透過
  • ヘッダ、フッタ、ページ番号付け、透かしを伴うページテンプレート
  • バーコード生成(QR、Code128、EAN-13、UPC-A、Code39、ITF)

追加 – 検索

  • 正規表現、大文字小文字の区別あり/なし、単語全体、ページ範囲を伴うテキスト検索
  • SearchOptionsSearchResult
  • ページ/座標による位置追跡

追加 – フォームフィールドのカバレッジ(95%)

  • 階層的なフィールド作成(ドット名を伴う親/子構造)
  • フィールドプロパティの変更(読み取り専用、必須、矩形、ツールチップ、最大長、配置、デフォルト値)
  • フォームデータ交換のための FDF/XFDF エクスポート

追加 – マルチメディア注釈

  • MovieAnnotation、SoundAnnotation、ScreenAnnotation、RichMediaAnnotation
  • U3D と PRC 形式サポートを伴う ThreeDAnnotation

追加 – XFA フォームサポート

  • XfaExtractor、XfaParser、XfaConverter(XFA から AcroForm への変換)

変更 – Python バインディング

  • abi3-py38 を介した真の Python 3.8-3.14 サポート
  • モダンなツール: uv、pdm、ruff の統合

v0.3.0 – 2026-01-10

抽出の基盤 – 統一 API とコア機能

追加 – 統一 Pdf API

  • 既存の PDF を読み取るための Pdf::open()
  • pdf.page(0) による DOM ライクなページナビゲーション
  • 高度なユースケースのための PdfDocument 低レベルハンドル

追加 – テキスト抽出

  • extract_text() – 全ページのプレーンテキスト
  • extract_spans() – フォントメタデータを伴うスタイル付きテキストラン
  • タグ付き PDF のための構造ツリーベースの読み取り順序
  • タグなし PDF のためのインテリジェントな改行とスペース検出

追加 – 画像抽出

  • extract_images() – ページからすべての画像を抽出
  • 形式検出(JPEG、PNG、TIFF、JBIG2、CCITT)
  • 色空間処理(DeviceRGB、DeviceCMYK、DeviceGray、ICCBased)

追加 – メタデータ抽出

  • 文書情報辞書(タイトル、作成者、件名、キーワード)
  • XMP メタデータの読み取り/書き込み
  • ページ情報(寸法、回転、media/crop/trim ボックス)

追加 – フォーム抽出

  • AcroForm フィールド列挙のための extract_form_fields()
  • テキスト、ボタン、選択、署名フィールド型

追加 – 変換

  • to_markdown() – ページレベルの Markdown 変換
  • to_html() – ページレベルの HTML 変換
  • to_plain_text() – 設定可能なプレーンテキスト出力

追加 – 準拠

  • PDF/A 検証(ISO 19005、レベル 1a から 3b)
  • PDF/X 検証(ISO 15930、レベル X-1a から X-6p)
  • PDF/UA 検証(ISO 14289、レベル UA-1 と UA-2)

追加 – レンダリング(rendering フィーチャーが必要)

  • tiny-skia を介したページの PNG/JPEG へのレンダリング
  • 設定可能な DPI とスケール

追加 – Python バインディング

  • 完全な抽出 API を備えた PdfDocument クラス
  • 作成と高レベル API を備えた Pdf クラス
  • PyO3 ベース、pdf_oxide として PyPI に公開

v0.2.4 – 2026-01-09

  • テキスト位置決めのための CTM 変換修正
  • 構造ツリーの /Alt/Pg 解析
  • 数式画像のための FormulaRenderer

v0.2.3 – 2026-01-07

  • PDF 仕様に準拠した BT/ET マトリックスリセット
  • Markdown 変換器での幾何学的間隔検出
  • リガチャとハイフネーションのための apply_intelligent_text_processing()

v0.2.2 – 2025-12-15

  • 発見可能性のためのキーワード最適化

v0.2.1 – 2025-12-15

  • 暗号化ストリームデコードの改善

v0.1.4 – 2025-12-12

  • 暗号化ストリームデコードの修正

v0.1.0 – 2025-11-06

  • 初回リリース
  • 仕様に準拠した Unicode マッピングによる PDF テキスト抽出
  • インテリジェントな読み取り順序検出
  • PyO3 を介した Python バインディング
  • 暗号化 PDF サポート
  • フォームフィールド抽出
  • 画像抽出