THotPDF.PreviewLoadedPageTextReplacement Method

Prepara il testo di sostituzione con font Unicode incorporati, misura ogni match e restituisce un piano verificabile senza modificare il documento caricato

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

Opzioni e risultati

THPDFLoadedTextReplacementOptions.Default usa Arial, la dimensione originale del font del match, la sua larghezza misurata e un'altezza di 1,25 volte quella dimensione, con rifiuto atomico attivo

Appearance seleziona font, stile, colore, allineamento e padding; UseMatchFontSize=False usa la dimensione richiesta, mentre BoxWidth e BoxHeight positivi forniscono un box di wrapping esplicito

Appearance.OverflowPolicy seleziona ltopReject, ltopClip o ltopShrinkToFit; il clipping conserva solo il testo del producer che ci sta nel box, e lo shrink-to-fit si ferma a MinFontSize

THPDFLoadedTextReplacementPlan trasporta la richiesta, le opzioni, il fingerprint della sorgente, i conteggi e l'array THPDFLoadedTextReplacementResults

Ogni THPDFLoadedTextReplacementResult riporta gli indici dei glifi, la posizione originale, le dimensioni del box, la dimensione effettiva del font e un valore THPDFLoadedTextReplacementStatus: ltrsReady, ltrsApplied, ltrsRejected o ltrsRolledBack, con una motivazione per il rifiuto o il rollback

MaxMatches, MaxGlyphs, MaxContentTokens, MaxContentBytes, MaxGeneratedBytes e il limite del testo di appearance vincolano il parsing della sorgente, l'output e le risorse font copiate

Geometria e atomicità

La sostituzione generata usa le catene di fallback dei font del documento, ShapingFeatures, gli switch di auto-shaping degli script e le selezioni di script e lingua GSUB; configura questi parametri prima dell'anteprima e mantieni le stesse impostazioni quando applichi il piano

Ogni appearance di sostituzione limita le selezioni distinte di font di shaping a 256 e i dati raw cumulativi dei font a 64 MiB, in aggiunta ai budget di parsing e di output generato della richiesta

La sostituzione cambia font dentro lo stream di testo originale, mantiene il testo circostante ricercabile e ripristina le matrici originali di penna e di riga, così che i glifi successivi e le transizioni di riga conservino le proprie posizioni

È supportato il testo diretto di pagina con geometria orizzontale non singolare, incluse le trasformazioni di pagina, lo scaling del testo, il rise, gli operatori TJ e apici singoli/doppi e i match che attraversano operandi adiacenti sulla stessa baseline

Match che attraversano baseline, scrittura verticale, trasformazioni singolari, contenuto non bilanciato, glifi mancanti e documenti contenenti campi firma vengono rifiutati; il testo dentro i Form XObjects è fuori dallo scope di match di questa API

Con Atomic=True, qualsiasi match rifiutato fa rollback di tutti i match ready; con Atomic=False, i match ready possono essere applicati mentre quelli rifiutati restano invariati, e il risultato booleano resta False quando almeno un match è stato rifiutato

L'anteprima usa e fa rollback di una transazione annidata del graph, preservando una transazione esistente del chiamante; può invalidare le cache del documento e invocare la notifica di modifica del documento anche se il contenuto viene ripristinato

Commit

Passa il piano a ApplyLoadedPageTextReplacement per riconvalidare il fingerprint di contenuto e metriche dei glifi prima di applicare la richiesta in una transazione del graph

Ricalcola il piano dopo ogni modifica al contenuto; un piano obsoleto solleva EInvalidOpException senza applicare le sue sostituzioni

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