JSON と C ABI のドキュメント操作
export.structured は選択されたページをセマンティック HTML、XHTML、XML、または JSON としてエクスポートし、tables.export は型付きテーブルを CSV、JSON、または XLSX としてエクスポートします。ページ間の連続性、結合セル、ネイティブの値推論は保持されます
どちらの操作もバイナリ出力先が必要で、ドキュメントと既存の署名フィールドを保持し、上限付きのネイティブエクスポートオプションを公開します
構造化・型付きテーブルエクスポート
{"schemaVersion":1,"type":"export.structured","pages":[0,1],"format":"html",
"options":{"imageMode":"metadata","includeFormControls":false}}
{"schemaVersion":1,"type":"tables.export","pages":[0,1],"format":"json",
"options":{"mergeAcrossPages":true,"dateOrder":"dmy",
"decimalSeparator":",","thousandsSeparator":"."}}
構造化エクスポートは html、xhtml、xml、json(既定) を受け付け、テーブルエクスポートは csv(既定)、json、xlsx を受け付けます
構造化のブールオプションは includeCoordinates、includeStyles、includeImages、includeTables、includeAccessibilitySemantics、preferTaggedStructure、fallbackToGeometricSemantics、includeNavigation、includeAnnotations、includeFormControls で、すべて既定で true です
imageMode は omit、metadata、embedded-png(既定) を受け付けます。セマンティックモデルと機密フィールドの動作については 構造化ロード済みページエクスポート を参照してください
構造化のリソースオプションは maxPageCount、maxGlyphsPerPage、maxImagesPerPage、maxStructureNodes、maxOutlineItems、maxInteractionsPerPage、maxFormOptionsPerField、maxOutputBytes、maxImageBytes、maxTotalImageBytes です
テーブルのブールオプションは detectMergedCells、detectRepeatedHeaders、mergeAcrossPages、inferValueTypes で、すべて既定で true です
dateOrder は ymd(既定)、mdy、dmy を受け付けます。区切り文字は 1 文字の印刷可能文字でなければならず、空の thousandsSeparator はこの機能を無効化します
minimumTableConfidence は 0 から 1 を受け付け、既定は 0.55 です。正の columnTolerance の既定は 12 ページ単位です
テーブルのリソースオプションは maxPageCount、maxGlyphsPerPage、maxTableCount、maxRowCount、maxCellCount、maxTextCharacters、maxOutputBytes です。セルモデルについては 型付きテーブル抽出 を参照してください
不明なオプション名、無効な型、非対応のフォーマット、正でない制限値は拒否されます。要求されたネイティブ制限は、控えめなメモリとオブジェクトの予算で上限が切られます
エクスポートのステージングは budget.outputBytes と budget.memoryBytes の 4 分の 1 のうち小さい方に上限が設定され、effectiveOutputLimit がその上限を報告します。より厳しい options.maxOutputBytes が適用される場合もあります
ネイティブリソースの失敗は budget-exceeded、メトリック nativeExportResources、ネイティブの診断を報告します。observed=1 と limit=0 は、実測のバイト使用量ではなく、リソースが拒否された状態を示します
どちらの操作も documentUpdated: false を報告し、ソースの自動起動とデコード設定を保持し、公開の前に出力をステージングし、ファイルジョブが失敗しても既存のファイル出力先を保持します
締め切りと ABI コールバックのキャンセルチェックは、操作と公開のチェックポイントで協調的に行われます。ネイティブのキャンセルトークンは対応する抽出ステージ内でも有効ですが、ネイティブ処理が強制中断されることはありません
THPDFJobProcessor.ExecuteLoadedOperation と hpdf_document_execute_json_v1 は、同じスキーマバージョン付きドキュメント操作エンジンを共有します
現在の操作名、フォーマット、署名プロファイル、コールバックの動作、既定の予算は、THPDFJobProcessor.Capabilities または hpdf_capabilities_json_to_io で確認できます
操作
操作 JSON は UTF-8 と schemaVersion: 1 を使用します。ページインデックスは 0 起点で、選択ページの配列に重複は許されません
| タイプ | 入力 | 結果 |
|---|---|---|
| info | ロード済みドキュメント | ページ、オブジェクト、フォーム、署名フィールドの数 |
| render | page、dpi (18–1,200)、format (png) | PNG アーティファクトと寸法 |
| export.structured | pages、format、options | セマンティック HTML/XHTML/XML/JSON アーティファクトとエクスポートテレメトリ |
| tables.export | pages、format、options | 型付き CSV/JSON/XLSX アーティファクトとテーブル/セル/ヘッダーのテレメトリ |
| text.extract | pages、省略可能な layout | Unicode ページテキストと省略可能な UTF-8 テキストアーティファクト |
| text.replace | pages、needle、replacement、matchCase | ページごとの一致/置換/スキップ数と省略可能な PDF アーティファクト |
| forms.read | ロード済みドキュメント | 名前、デコード済み Unicode 値、ネイティブフィールド型 |
| forms.fill | name/value 文字列の fields 配列 | 原子的な更新。不明な名前や重複する名前は操作を拒否します |
| forms.flatten | ロード済みドキュメント | フラット化された数と残りのフィールド |
| ocr.layer | pages、engine (builtin-ascii)、dpi、minimumConfidence、skipPagesWithText、replaceExisting | 検索可能な PDF と受け入れ/破棄された単語数 |
| redact | burnIn: true、page/x1/y1/x2/y2 を持つ rectangles | 適用されたリダクションの数と PDF アーティファクト |
| sign | pfxFile、pfxPassword、page、fieldName、省略可能な rectangle と contentsBytes | PFX 署名済み PDF アーティファクト |
| archive.pdfa4.raster | acceptInformationLoss: true、iccProfileFile、省略可能な dpi と options | 検証済み PDF/A-4 ラスターアーティファクト、削除数、明示的な損失プロファイル。ロード済みソースは保持されます |
テキスト置換は、ネイティブ置換 API が一致をエンコードできない場合に部分ステータスを返します。ページごとのカウントを確認してください
OCR は現在、組み込み ASCII エンジンを公開しています。ネイティブ Delphi API は外部 OCR アダプターを受け付けます
変更操作は、未署名のプレースホルダーを含む既存署名フィールドを持つドキュメントを拒否します。そのようなドキュメントで署名を保持するには、ネイティブの増分 API を使用してください
インクリメンタル PFX 署名は、変更されていない保持ソースを受け付けます。明示的な操作パスワードを使う対応済み暗号化 PDF も含みます。新旧すべての CMS を検証し、元のバイトと暗号化を保持し、既存の空フィールドを利用でき、暗号化権限を確認し、ソースと出力のファイル別名を拒否します
署名は署名済みアーティファクトを生成して元のハンドルを復元し、documentUpdated: false を報告します。既存のフォームフィールドは引き続き利用でき、一時的な署名フィールドは削除されます。署名の後もハンドルはクエリや別の操作に使用できます
PDF/A-4 ラスターアーカイブ変換
{
"schemaVersion": 1,
"type": "archive.pdfa4.raster",
"acceptInformationLoss": true,
"iccProfileFile": "profiles/sRGB.icm",
"dpi": 150,
"input": "source.pdf",
"output": "archive.pdf"
}
このオブジェクトはファイルジョブの operations 配列に置くか、ロード済みハンドルとバイナリ出力コールバックを添えて hpdf_document_execute_json_v1 に直接渡します。C ABI はファイルジョブの入出力パスを無視し、アダプターを使用します
acceptInformationLoss は JSON ブールの true でなければならず、iccProfileFile は実行ホスト上にある対応する sRGB matrix/TRC ICC プロファイルへの、空でなく NUL を含まないパスでなければなりません。相対プロファイルパスはプロセスのワーキングディレクトリ基準で解決されます
dpi は既定 150 で、36 から 1,200 の整数を受け付けます。変換はすべてのソースページを対象とし、pages メンバーがあれば拒否します
archive 結果オブジェクトは nativeValidationSucceeded、sourcePages、pagesRendered、rasterPixels、outputBytes、removedAnnotations、removedFormFields、removedEmbeddedFiles を報告します
archive.lossy は true になり、archive.lossProfile のすべてのフラグ、つまり searchableText、vectorContent、interactiveContent、originalSignatures、annotationAppearances、structureIdentity は false です
ページコンテンツは RGB ピクセルになり、注釈とウィジェット外観は省略され、元の署名は出力に引き継がれません。ロード済みソースは公開が失敗した後も documentUpdated: false で利用可能なままです。以前の起動、デコード、ストリームしきい値、キャンセル、レンダリングの各設定は復元されます
バイナリ出力が必須で、配信の前にネイティブ PDF/A-4 検証が成功しなければなりません。レンダリング、カラー、コーデック、ソースエイリアス、適合性の境界については ロード済み PDF/A-4 ラスター変換 を参照してください
アーカイブのリソース予算
省略可能な options オブジェクトは、次の実効上限を引き締める正の正確な整数を受け付けます。不明なキーや上限を超える値は、操作の予算を増やすのではなく要求を拒否します
| オプション | 実効既定値と最大値 |
|---|---|
| maxPages | 1,000 と budget.pageCount の最小値 |
| maxInputObjects | 200,000 と budget.objectCount の最小値 |
| maxPixelsPerPage | 40,000,000、budget.pixels、memoryBytes / 32 の最小値 |
| maxTotalPixels | 500,000,000、budget.pixels、memoryBytes / 32 の最小値 |
| maxRasterBytes | 256 MiB と memoryBytes / 8 の最小値 |
| maxOutputBytes | 256 MiB、budget.outputBytes、memoryBytes / 8 の最小値 |
| maxDecodedStreamBytes | 64 MiB と memoryBytes / 8 の最小値 |
| maxTotalDecodedBytes | 256 MiB と memoryBytes / 4 の最小値 |
ICC ファイルは割り当ての前に 4 MiB と memoryBytes / 16 の小さい方に上限が設定されます。これらの控えめな許容量は、同時に進むステージング、出力バッファ、画像データ、デコーダーの作業を見込んだものであり、厳密なプロセス RSS 制限ではありません
大きなアーカイブワークロードが意図したものであれば、トップレベルのジョブ予算を増やしてください。ネストされたオプションは実効上限を引き締めるだけで、ネイティブの最大値は引き続き適用されます
アーカイブのチェックポイントは、変換中にコールバックのキャンセル、借用ソースのキャンセルトークン、経過時間、オブジェクト数をポーリングします。予算とキャンセルの失敗は、ネイティブコンバーターをまたいでも構造化ステータスコードを保持します
ファイルジョブ
{
"operations": [
{"type": "capabilities"},
{"schemaVersion": 1, "type": "text.extract", "input": "input.pdf",
"pages": [0, 1], "output": "text.txt"}
]
}
THPDFJobProcessor.Execute は操作配列を受け付け、最大 1,024 操作と 4 MiB の JSON までです。既存の merge、split、optimise、encrypt、validate ジョブも引き続き利用できます
各ドキュメント操作は入力パスと省略可能なパスワードを指定します。render、text.replace、forms.fill、forms.flatten、ocr.layer、redact、sign、archive.pdfa4.raster は出力パスが必要です
アーティファクトは出力先の隣の一時ファイルに書き込まれ、フラッシュと検証を経てから原子的に公開されます。失敗時は既存の出力先が保持され、入力と出力は同じパスを共有できます
C コールバック契約
hpdf_operation_v1 をゼロ初期化し、struct_size にネイティブサイズ、abi_version に HPDF_ABI_VERSION_1、flags に 0 を設定します。サイズは hpdf_abi_operation_v1_size と比較してください
操作レコードは、JSON バイトと正確な長さ、省略可能なランダムアクセス入力、省略可能な逐次バイナリ出力、必須の逐次 JSON 結果出力を運びます
遅延パースはアダプターを保持するため、入力コールバック、ユーザーデータ、裏付けの PDF バイトは、ハンドルが置き換えられるか破棄されるまで有効のままにしてください
出力/結果コールバックは呼び出し中だけ存在します。ハンドルごとに呼び出しを直列化し、コールバックの再入を避けてください
コールバックは cdecl を使用し、部分的な転送は再試行され、成功した書き込みは正の進捗を示さなければなりません。例外は固定ステータスコードに変換されます
変更は、アーティファクトと JSON 結果の両方の配信が成功した後にだけコミットされます。コールバックの失敗やキャンセルは変更をロールバックし、呼び出し側はすでに配信されたバイトを破棄します
置換入力は変更トランザクションの前にロードされ、別の状態変更のままです
予算
省略可能な予算オブジェクトは、9,007,199,254,740,991 を超えない正の正確な整数を受け付けます
| キー | 既定値 |
|---|---|
| memoryBytes | 268,435,456 |
| outputBytes | 134,217,728 |
| resultBytes | 16,777,216 |
| timeMilliseconds | 60,000 |
| objectCount | 1,000,000 |
| pageCount | 1,024 |
| pixels | 100,000,000 |
汎用の出力/結果予算はそれぞれメモリ予算の半分に上限が設定され、アーカイブ変換には前述のより厳しい上限が適用されます。これらはプロセス全体のメモリではなく、設定された操作リソースを拘束します
キャンセルと経過時間のチェックは、操作、ページ、入力読み取り、出力書き込みの各チェックポイントで協調的に行われます。長いネイティブルーチンは、次のチェックポイントまでは処理を続けられます
レポートは schemaVersion、status、statusCode を運びます。予算エラーは status 8、キャンセルは 4、I/O 失敗は 5、パース失敗は 6、無効な引数は 1、実行失敗は 7 を使用します