THotPDF.PreviewLoadedPageTextReplacement Method

Prépare le texte de remplacement avec des polices Unicode embarquées, mesure chaque correspondance et renvoie un plan auditable sans modifier le document chargé

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

Options et résultats

THPDFLoadedTextReplacementOptions.Default utilise Arial, la taille de police d'origine de la correspondance, sa largeur mesurée et une hauteur de 1,25 fois cette taille, avec le rejet atomique activé

Appearance choisit la police, le style, la couleur, l'alignement et le padding ; UseMatchFontSize=False utilise la taille demandée, tandis que des BoxWidth et BoxHeight positifs fournissent une boîte de wrap explicite

Appearance.OverflowPolicy choisit ltopReject, ltopClip ou ltopShrinkToFit ; le clipping ne conserve que le texte ajusté par le producteur et le shrink-to-fit s'arrête à MinFontSize

THPDFLoadedTextReplacementPlan transporte la requête, les options, l'empreinte de la source, les comptages et le tableau THPDFLoadedTextReplacementResults

Chaque THPDFLoadedTextReplacementResult rapporte les index de glyphes, la position d'origine, les dimensions de boîte, la taille de police effective et une valeur THPDFLoadedTextReplacementStatus : ltrsReady, ltrsApplied, ltrsRejected ou ltrsRolledBack, avec un motif de rejet ou de rollback

MaxMatches, MaxGlyphs, MaxContentTokens, MaxContentBytes, MaxGeneratedBytes et la limite de texte d'apparence bornent l'analyse de la source, la sortie et les ressources de polices copiées

Géométrie et atomicité

Le remplacement généré utilise les chaînes de fontes de secours du document, ShapingFeatures, les commutateurs d'auto-shaping par script et les sélections GSUB de script et de langue ; configurez-les avant la prévisualisation et conservez les mêmes réglages lors de l'application du plan

Chaque apparence de remplacement limite les sélections distinctes de polices de shaping à 256 et les données brutes de polices cumulées à 64 Mio, en plus des budgets d'analyse et de sortie générée de la requête

Le remplacement change de police au sein du flux de texte d'origine, garde le texte environnant recherchable et restaure les matrices de plume et de ligne d'origine afin que les glyphes suivants et les transitions de ligne conservent leurs positions

Le texte direct de page à géométrie horizontale non singulière est pris en charge, y compris les transformations de page, la mise à l'échelle du texte, le rise, les opérateurs TJ et guillemets simple/double, et les correspondances à cheval sur des opérandes adjacents d'une même ligne de base

Les correspondances à cheval sur plusieurs lignes de base, l'écriture verticale, les transformations singulières, le contenu déséquilibré, les glyphes manquants et les documents contenant des champs de signature sont rejetés ; le texte au sein des Form XObjects est hors de la portée de correspondance de cette API

Avec Atomic=True, toute correspondance rejetée annule (rollback) toutes les correspondances prêtes ; avec Atomic=False, les correspondances prêtes peuvent être appliquées tandis que les rejetées restent inchangées, et le résultat booléen reste False dès qu'une correspondance a été rejetée

La prévisualisation utilise et annule une transaction de graphe imbriquée en préservant une transaction existante de l'appelant ; elle peut invalider les caches du document et déclencher la notification de modification du document même si le contenu est restauré

Application

Transmettez le plan à ApplyLoadedPageTextReplacement pour revalider son empreinte de contenu et de métriques de glyphes avant d'appliquer la requête dans une transaction de graphe

Recalculez un plan après tout changement de contenu ; un plan obsolète lève EInvalidOpException sans appliquer ses remplacements

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