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);