THotPDF.PreviewLoadedPageTextReplacement メソッド

埋め込み Unicode フォントで置換テキストを準備し、各一致を測定して、ロード済みドキュメントを変更せずに監査可能なプランを返します

function PreviewLoadedPageTextReplacement(PageIndex: Integer;
  const Needle, Replacement: UnicodeString; MatchCase: Boolean;
  const Options: THPDFLoadedTextReplacementOptions;
  out Plan: THPDFLoadedTextReplacementPlan): Boolean;

オプションと結果

THPDFLoadedTextReplacementOptions.Default は Arial、一致箇所の元のフォントサイズ、測定された幅、そのサイズの 1.25 倍の高さを使い、原子的拒否が有効です

Appearance はフォント、スタイル、色、配置、パディングを選択します。UseMatchFontSize=False は要求されたサイズを使い、正の BoxWidth と BoxHeight は明示的な折り返しボックスを提供します

Appearance.OverflowPolicy は ltopReject、ltopClip、ltopShrinkToFit を選択します。クリッピングは収まるテキストだけを保持し、shrink-to-fit は MinFontSize で停止します

THPDFLoadedTextReplacementPlan はリクエスト、オプション、ソースフィンガープリント、カウント、THPDFLoadedTextReplacementResults 配列を運びます

各 THPDFLoadedTextReplacementResult は、グリフインデックス、元の位置、ボックス寸法、実効フォントサイズ、THPDFLoadedTextReplacementStatus 値(ltrsReady、ltrsApplied、ltrsRejected、ltrsRolledBack のいずれか)と、拒否またはロールバックの理由を報告します

MaxMatches、MaxGlyphs、MaxContentTokens、MaxContentBytes、MaxGeneratedBytes と外観テキスト制限は、ソースパース、出力、コピーされたフォントリソースを拘束します

ジオメトリと原子性

生成される置換は、ドキュメントのフォントフォールバックチェーン、ShapingFeatures、用字系オートシェーピングのスイッチ、GSUB の用字系と言語の選択を使用します。プレビューの前にこれらを設定し、プラン適用時も同じ設定を保ってください

各置換外観は、リクエストのパース予算と生成出力予算に加えて、個別のシェーピングフォント選択を 256 まで、生フォントデータの累計を 64 MiB までに制限します

置換は元のテキストストリーム内でフォントを切り替え、周囲のテキストを検索可能なまま保ち、元のペンマトリクスとラインマトリクスを復元するため、後続のグリフや行の切り替えは位置を維持します

水平かつ非特異なジオメトリを持つページ直接テキストが対応対象で、ページ変換、テキストスケーリング、rise、TJ、シングル/ダブルクォート演算子、同じベースライン上の隣接オペランドにまたがる一致を含みます

ベースラインをまたぐ一致、縦書き、特異な変換、不均衡なコンテンツ、欠落グリフ、署名フィールドを含むドキュメントは拒否されます。Form XObject 内のテキストはこの API の一致範囲外です

Atomic=True では、1 つでも拒否された一致があるとすべての準備済み一致がロールバックされます。Atomic=False では、準備済み一致を適用しつつ拒否された一致は変更されず、1 つでも拒否があればブール結果は False のままです

プレビューはネストされたグラフトランザクションを使用してロールバックし、既存の呼び出し側トランザクションを保ちます。コンテンツは復元されるものの、ドキュメントキャッシュを無効化したり、ドキュメント変更通知を発火したりすることがあります

コミット

プランを ApplyLoadedPageTextReplacement に渡すと、グラフトランザクション内でリクエストを適用する前に、コンテンツとグリフメトリクスのフィンガープリントが再検証されます

コンテンツが変わった後はプランを再計算してください。古いプランは置換を適用せずに EInvalidOpException を発生させます

Options := THPDFLoadedTextReplacementOptions.Default;
Options.Appearance.OverflowPolicy := ltopShrinkToFit;
if PDF.PreviewLoadedPageTextReplacement(0, 'Original', NewText,
  True, Options, Plan) then
  if PDF.ApplyLoadedPageTextReplacement(Plan, Applied) then
    PDF.SaveLoadedDocument(TargetPath);