THotPDF.PreviewLoadedPageTextReplacement Method

내장 Unicode 폰트로 치환 text를 준비하고 각 match를 측정하며, 로드된 문서를 바꾸지 않고 감사 가능한 plan을 반환합니다

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

옵션과 결과

THPDFLoadedTextReplacementOptions.Default는 Arial과 match의 원래 폰트 크기, 측정된 폭, 그 크기의 1.25배 높이를 쓰고 atomic rejection이 켜져 있습니다

Appearance는 폰트, style, color, alignment, padding을 고르고, UseMatchFontSize=False면 요청한 크기를 쓰며, 양수 BoxWidth와 BoxHeight는 명시적인 wrapping box를 제공합니다

Appearance.OverflowPolicy는 ltopReject, ltopClip, ltopShrinkToFit 중 하나를 고르고, clipping은 producer에 맞는 text만 남기며 shrink-to-fit은 MinFontSize에서 멈춥니다

THPDFLoadedTextReplacementPlan은 요청, 옵션, 소스 fingerprint, 개수, THPDFLoadedTextReplacementResults 배열을 담습니다

각 THPDFLoadedTextReplacementResult는 glyph index, 원래 위치, box 크기, effective 폰트 크기와 함께 거부나 rollback 이유가 붙는 THPDFLoadedTextReplacementStatus 값, 즉 ltrsReady, ltrsApplied, ltrsRejected, ltrsRolledBack 중 하나를 보고합니다

MaxMatches, MaxGlyphs, MaxContentTokens, MaxContentBytes, MaxGeneratedBytes와 appearance text 상한은 소스 파싱, 출력, 복사된 폰트 리소스를 묶습니다

Geometry와 atomicity

생성된 치환은 문서의 폰트 fallback 체인, ShapingFeatures, script auto-shaping 스위치, GSUB script와 언어 선택을 사용하니 preview 전에 이를 설정하고 plan을 적용할 때도 같은 설정을 유지하세요

각 치환 appearance는 요청의 파싱과 생성 출력 예산 외에, 서로 다른 shaping 폰트 선택을 256개로, 누적 raw 폰트 data를 64 MiB로 제한합니다

치환은 원본 text stream 안에서 폰트를 바꾸고 주변 text를 검색 가능하게 유지하며, 원래 pen과 line 행렬을 복원해 뒤따르는 glyph과 line 전환이 제자리를 지키게 합니다

수평이고 nonsingular인 geometry를 쓰는 직접 page text를 지원하며, page transform, text scaling, rise, TJ, single/double-quote 연산자와 같은 baseline 위 인접 operand를 넘나드는 match가 포함됩니다

baseline을 넘나드는 match, 세로 쓰기, singular transform, unbalanced content, 빠진 glyph, signature 필드가 있는 문서는 거부되고, Form XObject 안 text는 이 API의 match 범위 밖입니다

Atomic=True면 거부된 match가 하나라도 있으면 준비된 모든 match를 rollback하고, Atomic=False면 준비된 match는 적용하되 거부된 match는 그대로 두며, match가 하나라도 거부되면 Boolean 결과는 False로 남습니다

preview는 nested graph transaction을 쓰고 rollback하며 기존 caller transaction은 보존하고, 내용이 복원되더라도 문서 cache를 무효화하고 문서 수정 notification을 발생시킬 수 있습니다

커밋

plan을 ApplyLoadedPageTextReplacement에 넘기면 graph transaction 안에서 요청을 적용하기 전에 content와 glyph-metric fingerprint를 다시 검증합니다

content가 바뀐 뒤에는 plan을 다시 계산해야 하고, stale plan은 치환을 적용하지 않은 채 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);