ネイティブヘッドレスドキュメント比較
HPDFHeadlessCompare は HPDFCompareHeadlessDocuments 経由で 2 つの読み込み済みネイティブドキュメントを比較します。Linux のコールバック ABI は、type:compare 付きの hpdf_document_compare_json_v1 で同じ実装を公開しています
| Pascal モード | JSON モード | 比較対象の内容 |
|---|---|---|
| hcmPageCount | pagecount | ページツリーのリーフ数 |
| hcmPageText | pagetext | ページ数と抽出された Unicode テキスト |
| hcmObjectCount | objectcount | ページ数と物理的に使用中のクロスリファレンスオブジェクト数 |
| hcmRenderedImage | renderedimage | ページ数、レンダリングされた寸法、ネイティブ Cairo ピクセル |
| hcmStructural | structural | ページ数と、正規化されたカタログ・情報・到達不能オブジェクトのグラフ |
| hcmFull | full | ページ数とオブジェクト数、正規化されたグラフ、Unicode テキスト、レンダリングされたピクセル |
構造的な等価性
構造比較は間接参照を解決してディクショナリーエントリーをソートし、PDF 名やリテラル・16 進の文字列表現を正規化してから、SHA-256 で内容をハッシュ化する前に通常のストリームフィルターをデコードします
オブジェクト番号、シリアライズ順、通常のストリーム圧縮は構造的な等価性を変えません。ターミナルイメージのエンコーディングはフィルターとデコードポリシーを保持し、到達不能オブジェクトはマルチセットとして比較されます
暗号化ディクショナリーと、クロスリファレンスまたはオブジェクトストリームの格納コンテナーは、意味的な構造の対象外です。認証済み AES R5/R6 の内容は、抽出権限を強制した上で復号後に比較されます
構造の差分はドキュメントレベルのパス $Document として報告されます。物理オブジェクト数は別モードのままで、同じ内容でも格納レイアウトが違えば異なる値になり得ます
レンダリング比較
各ページは選択した DPI でネイティブ Cairo デバイスにより実際にレンダリングされます。デコード済みの画像ピクセルは白地に合成され、RGB または輝度で比較されます
レポートには寸法、変化ピクセル数、チャネル差の最大値、平均絶対誤差、変化ピクセル率、類似度が含まれます。類似度は 1 - meanAbsoluteError / 255 です
チャネル差の最大値が ColorTolerance を超えると、そのピクセルは変化とみなされます。ページが合格するのは、寸法が一致し、類似度と変化ピクセル率の両方が設定済みしきい値を満たす場合だけです
レンダリングには、ネイティブページのレンダリングと同じ対応フォント、画像コーデック、グラフィックスセマンティクスが必要です。未対応のページは同一のレポートを出すのではなく、比較を失敗させます
有界な実行
比較オプションは、走査、深さ、オブジェクト、デコード済みストリーム、テキスト準備、結果格納、レンダリングピクセルに上限を設けます。キャンセルは走査、テキスト抽出、レンダリングのそれぞれに伝播します
Pascal での比較の間は、両方のドキュメントインスタンスを生存させ、単独の所有権を保ってください。元の内容とリソースオプションは、成功・失敗・キャンセルのいずれでも保持されます
Linux ABI は上記の 6 つの小文字モード名と、Pascal の上限に一致する厳格な options メンバーに加え、dpi、colorTolerance、minimumSimilarity、maxChangedPixelRatio、colorSpace:rgb または luminance を受け付けます
ABI の結果は、同期コールバックで公開する前に完全に準備され、上限内に収められます。同一ハンドルへの呼び出しも逆順の並行呼び出しも、既存の安定したロック順序を使います