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