ネイティブ Linux と macOS
ネイティブ FPC バックエンドは、Linux x64 と macOS ARM64 でのヘッドレスなライブラリワークフローをサポートし、実際の ELF と Mach-O プログラムを生成します
PDF の作成、保存・読み込み、テキスト抽出と編集、構造化抽出、移植性のある OCR コールバック、ビットマップ描画、メタデータ、暗号化、ネットワークレンジアクセス、ネイティブ PFX 署名には、既存の TPDFlib API をそのまま使えます
実行時の依存ライブラリ
| プロバイダー | ライブラリ | 用途 |
|---|---|---|
| OpenSSL 3 | libcrypto | AES CBC/GCM、ダイジェスト、PKCS12 アイデンティティ、CMS 署名、完全性、明示的なトラストアンカーチェーン |
| libcurl | 非同期 DNS 対応の libcurl | HTTP/HTTPS、上限付きバイナリ転送、レンジアクセス、RFC 3161 リクエスト |
| Cairo | libcairo | ビットマップイメージサーフェス、パス、クリッピング、グリフアウトライン、画像 |
| Fontconfig | libfontconfig | 実際のネイティブフォントファイルのマッチング (明示的なファミリー代替を含む) |
| OpenJPEG 2 | libopenjp2 | JPEG 2000 のデコードとエンコード |
Linux は対応するシステム SONAME を読み込みます。macOS は /opt/homebrew 配下の ARM64 ライブラリとシステムの libcurl を使います
ライブラリやシンボルの欠落、サポートされない操作は明示的な失敗になります。Windows のデバイスコンテキスト代替は使いません
署名とタイムスタンプ
既定の PFX プロバイダーは、実際の RSA と EC アイデンティティ、detached CMS、CAdES、旧式の attached SHA1 プロファイルに対応します。検証は PDF の ByteRange バイトと CMS 署名を確認します
証明書チェーンの検証には明示的なトラストアンカーが必要です。埋め込み証明書は信頼を与えず、完全性だけでは信頼を意味しません
ApplyPAdESSignatureTimeStamp は、構成された既定のネイティブ HTTP トランスポートを使って実際の RFC 3161 トークンを取得して添付します。元の署名の前に十分な /Contents 容量を確保してください
タイムスタンプの検証は、署名されたトークン、メッセージインプリント、排他的な critical な timeStamping EKU、TSA 名、必要に応じた期待ポリシー/ノンス、トークン生成時点での信頼された証明書チェーンを確認します
ドキュメントタイムスタンプは、実際の PDF ByteRange インプリントも検証します。呼び出し側は既存の DocTimeStamp パススルーワークフローを使ってトークンを供給できます
メタデータと描画
XMP は実際の名前空間対応 DOM を使い、編集中も無関係なプロパティを保持します
DTD 宣言は、ソースエンコーディングに関係なく XML リーダーに拒否されます。入力文字とデコード後の文字には上限があり、DOM 構築の前にストリーミングパスで深さとノードイベントが制限されます
描画は実際のネイティブビットマップストレージと Cairo イメージサーフェスを使います。バンド描画はデバイス空間の座標を保持し、ガード行で境界のアンチエイリアシングの一貫性を保ちます
ネイティブのファミリーフォント埋め込みは実際の Fontconfig ファイルを解決し、CIDFontType2、Identity の CIDToGIDMap、初期化済みメトリクス、Unicode の幅を持つ完全なスタンドアロン TrueType プログラムを埋め込みます。BMP テキストと移植性のある OCR レイヤーは、PDF の保存と再読み込みをまたいで生き残ります
このエントリは、埋め込みされていないファミリーフォント、コレクション、CFF プログラム、ビットマップ限定の埋め込み権限を拒否します。制限付き埋め込みには既存の明示的な権限オーバーライドが必要で、サブセット化を禁じるフォントは完全なプログラムのままになります
制限
- Windows デバイスコンテキスト、EMF、GUI、クリップボード、印刷は、ネイティブのヘッドレスバックエンドの対象外です
- 複雑なネイティブテキストシェーピングと、Windows システム証明書ストアのアイデンティティは利用できません
- スタンドアロン TrueType 埋め込みのエントリは現在 BMP テキストに対応しています。補助面のテキスト、TTC フェイスの抽出、CFF 埋め込みはこのエントリの対象外です
- オンラインの OCSP/CRL 失効確認は利用できません。失効検証を要求すると結果不明を報告します
- 既定のネイティブ PFX プロバイダーは、RSA-PSS と追加のポリシー、コミットメント、失効署名属性を拒否します
- ネイティブの CMYK/ICC 変換と、インデックス付き 1 ビット BMP の書き込みは利用できません
- HTTP が DNS ルックアップのタイムアウトを守るには、libcurl の非同期 DNS サポートが必要です
ビルドと検証
python3 Tests/Native/run_native_tests.py --compiler /path/to/fpc --output /tmp/pdflib-native-tests
明示的なコンパイラ構成には --config /path/to/fpc.cfg を渡します。ランナーはグローバルなコンパイラ設定を変更せず、-FcUTF8 も追加しません
スイートは実際のネイティブ実行ファイル形式を検査し、コンパイラと依存ライブラリのバージョン、ソースハッシュ、実行ファイルハッシュ、結果、制限を含む JSON レポートを書き出します
リポジトリに同梱の Tests/Native フィクスチャは、PDF の保存・再読み込み・描画、テキストワークフロー、暗号化、メタデータ、署名、実際の HTTP/TSA トラフィック、ネガティブなセキュリティケースをカバーします