ユニット: FPdfContentNormalize
1 つの論理的な PDF ページコンテンツシーケンスに対する構文を保持する正規化と、堅牢なインライン画像境界検出です
構文
const
PdfContentNormalizeDefaultInputLimit = Int64(256) * 1024 * 1024;
PdfContentNormalizeDefaultOutputLimit = Int64(256) * 1024 * 1024;
PdfContentNormalizeDefaultTokenLimit = 10000000;
function NormalizePdfContentSequence(const Streams: array of TBytes;
const Options: TPdfContentNormalizeOptions; out Output: TBytes;
out Report: TPdfContentNormalizeReport): Boolean;
function CollectPdfContentResourceUses(const Data: TBytes;
out Uses: TPdfContentResourceUses;
out ErrorText: string): Boolean;
function FindInlineImageBlock(const Data: TBytes; StartPos: Integer;
out BiPos, IdPos, DataStart, EndImageStart: Integer): Boolean;
説明
NormalizePdfContentSequence は指定されたコンテンツストリームを配列順に連結し、その結果を 1 つの論理的なページコンテンツシーケンスとしてトークン化します
トークン区切りを正規化しながら、リテラル文字列、16 進文字列、名前、配列、辞書、インライン画像ペイロード、未知のオペレータを保持します。コメントは除去でき、構造のバランスを要求することもできます
CollectPdfContentResourceUses は、中央のトークン予算の下で、テキスト、XObject、グラフィックス状態、色空間、パターン、シェーディング、marked-content プロパティ、インライン画像の各オペレータが消費するリソース名を記録します
FindInlineImageBlock は、画像ペイロードデータ内の EI バイトシーケンスを終端と誤認せずに、完全な BI、ID、EI ブロックを特定します
定数
| 定数 | 説明 |
PdfContentNormalizeDefaultInputLimit | ページあたりの論理入力の既定上限 256 MiB です |
PdfContentNormalizeDefaultOutputLimit | ページあたりの正規化出力の既定上限 256 MiB です |
PdfContentNormalizeDefaultTokenLimit | ページあたりの既定上限 10000000 トークンです |
関数
| 関数 | 説明 |
TPdfContentNormalizeOptions.Default | コメント除去、バランス検証、有益な Flate 圧縮、安全でないページのスキップを有効にします。署名付き書き換えを禁止し、3 つの既定上限を適用します |
NormalizePdfContentSequence | 正規化済みバイトと詳細なレポートを返します。失敗時には False と失敗ステータス、診断テキストを返します |
CollectPdfContentResourceUses | リソースを消費するコンテンツオペレータごとに、リソース種別とデコード済み PDF 名を返します。不正または予算超過の入力には False と診断テキストを返します |
FindInlineImageBlock | StartPos 以降にある次の完全なインライン画像ブロックのオフセットを返します |
型
| 型 | 説明 |
TPdfContentNormalizeStatus | シーケンスおよびドキュメント正規化の結果または失敗カテゴリです |
TPdfContentNormalizeOptions | 正規化ポリシーと、ページあたりのバイトおよびトークン上限です |
TPdfContentNormalizeReport | ステータス、バイトとページの合計、ストリームとトークンの指標、構文の観察結果、診断テキストです |
TPdfContentResourceKind | リソース値 pcrkFont、pcrkXObject、pcrkExtGState、pcrkColorSpace、pcrkPattern、pcrkShading、pcrkProperties です |
TPdfContentResourceUse | デコード済みリソースの Name とその Kind の組です |
TPdfContentResourceUses | コンテンツ順に収集されたリソース使用の動的配列です |
ステータス値
| 値 | 意味 |
pcnsNotStarted | レポートは初期化済みですが、正規化は完了していません |
pcnsCompleted | 正規化が正常に完了しました |
pcnsInputLimitExceeded | 論理入力が MaxInputBytesPerPage を超えたか、設定された上限が正でありません |
pcnsOutputLimitExceeded | 正規化済みバイトが MaxOutputBytesPerPage を超える見込みです |
pcnsTokenLimitExceeded | コンテンツシーケンスが MaxTokensPerPage を超えました |
pcnsMalformedToken | PDF コンテンツトークンを完全に読み取れませんでした |
pcnsUnresolvedInlineImage | 完全なインライン画像ペイロードの境界が見つかりませんでした |
pcnsUnbalancedState | 要求されたグラフィックス、テキスト、marked-content、互換、配列、辞書スコープのバランス検証に失敗しました |
pcnsUnsupportedFilter | ドキュメントレベルの正規化が、デコードできないコンテンツストリームフィルタに遭遇しました |
pcnsEncryptedDocument | ドキュメントレベルの正規化が暗号化された入力を拒否しました |
pcnsSignedDocument | ドキュメントレベルの正規化が、認可のない署名付き入力を拒否しました |
pcnsDocumentRewriteFailed | 外側の PDF オブジェクトグラフ書き換えまたは検証に失敗しました |
pcnsResourceBudgetExceeded | 正規化の完了前にプロセス全体の TPdfParserResourceBudget の期限に達しました |
オプション
| フィールド | 説明 |
RemoveComments | 必要なトークン境界を保持したまま PDF コメントを省略します |
RequireBalancedState | q/Q、BT/ET、marked-content、互換、配列、辞書スコープのバランスを要求します |
CompressOutput | 圧縮がサイズを減らす場合に、ドキュメントレベルのラッパーが正規化済みページストリームを Flate 圧縮することを許可します |
SkipUnsafePages | 安全でないまたは未対応の結果に対して、ドキュメント書き換えを中止する代わりに、ドキュメントレベルの正規化がページを変更せず保持することを許可します |
AllowSignedDocument | 署名付き入力の完全書き換えを明示的に許可します。既存の署名バイトレンジは無効化されます |
MaxInputBytesPerPage | 1 ページに供給されるコンテンツストリームの合計バイト数の上限です |
MaxOutputBytesPerPage | 正規化済みコンテンツシーケンスに許容されるバイト数の上限です |
MaxTokensPerPage | 1 ページについて検査されるトークン数の上限です |
レポートフィールド
| フィールド | 説明 |
Status | 現在の TPdfContentNormalizeStatus です |
SourceByteCount | ソースコンテンツの合計バイト数です |
OutputByteCount | 正規化または書き換え済み出力の合計バイト数です |
PageCount | ドキュメントレベルの正規化が検査したページ数です |
NormalizedPageCount | 正規化済みコンテンツへの置き換えに成功したページ数です |
SkippedPageCount | スキップポリシーの下で変更されず保持された安全でないページの数です |
InputStreamCount | 論理ページシーケンスへ連結されたソースコンテンツストリームの数です |
OutputStreamCount | 生成された正規化済みコンテンツストリームの数です |
CoalescedArrayCount | 1 つの正規化済みストリームへ置き換えられた複数ストリームの /Contents 配列の数です |
TokenCount | 処理されたトークン数です |
CommentCount | 保持/除去の別を問わず遭遇したコメントの数です |
InlineImageCount | 保持された完全なインライン画像ブロックの数です |
UnknownOperatorCount | そのまま保持された未認識オペレータの数です |
ErrorMessage | 最初の失敗に対する診断テキストです |
インライン画像のオフセット
BiPos は BI キーワードのバイトオフセットです
IdPos は ID キーワードのバイトオフセットです
DataStart は ID の後に必ず 1 つ置かれる空白の次の、最初のペイロードバイトです
EndImageStart は終端の EI キーワードのバイトオフセットであり、したがってペイロードの 1 バイト後です
StartPos 以降に完全なブロックが見つからない場合、関数は False を返します
関連項目