Método THotPDF.PreviewLoadedPageTextReplacement
Prepara el texto de reemplazo con fuentes Unicode embebidas, mide cada coincidencia y devuelve un plan auditable sin modificar el documento cargado
function PreviewLoadedPageTextReplacement(PageIndex: Integer;
const Needle, Replacement: UnicodeString; MatchCase: Boolean;
const Options: THPDFLoadedTextReplacementOptions;
out Plan: THPDFLoadedTextReplacementPlan): Boolean;
Opciones y resultados
THPDFLoadedTextReplacementOptions.Default usa Arial, el tamaño de fuente original de la coincidencia, su ancho medido y una altura de 1.25 veces ese tamaño, con el rechazo atómico habilitado
Appearance selecciona fuente, estilo, color, alineación y padding; UseMatchFontSize=False usa el tamaño solicitado, mientras que un BoxWidth y un BoxHeight positivos proporcionan una caja de wrapping explícita
Appearance.OverflowPolicy selecciona ltopReject, ltopClip o ltopShrinkToFit; el clipping retiene solo el texto que hizo caber el productor y el shrink-to-fit se detiene en MinFontSize
THPDFLoadedTextReplacementPlan transporta la solicitud, las opciones, el fingerprint del origen, los conteos y el array THPDFLoadedTextReplacementResults
Cada THPDFLoadedTextReplacementResult reporta índices de glifos, posición original, dimensiones de la caja, tamaño de fuente efectivo y un valor THPDFLoadedTextReplacementStatus: ltrsReady, ltrsApplied, ltrsRejected o ltrsRolledBack, con un motivo de rechazo o de rollback
MaxMatches, MaxGlyphs, MaxContentTokens, MaxContentBytes, MaxGeneratedBytes y el límite de texto de la apariencia acotan el parseo del origen, la salida y los recursos de fuente copiados
Geometría y atomicidad
El reemplazo generado usa las cadenas de fallback de fuentes del documento, ShapingFeatures, los switches de auto-shaping de scripts y las selecciones de script e idioma del GSUB; configuren todo esto antes de previsualizar y mantengan los mismos ajustes al aplicar el plan
Cada apariencia de reemplazo limita las selecciones de fuentes de shaping distintas a 256 y los datos crudos de fuentes acumulados a 64 MiB, además de los presupuestos de parseo y de salida generada de la solicitud
El reemplazo cambia de fuente dentro del stream de texto original, mantiene el texto circundante buscable y restaura las matrices originales de pen y de línea para que los glifos siguientes y las transiciones de línea conserven sus posiciones
Se soporta el texto directo de página con geometría horizontal no singular, incluyendo transforms de página, escalado de texto, rise, el operador TJ, los operadores de comillas simples/dobles y las coincidencias que cruzan operandos adyacentes en la misma línea base
Se rechazan las coincidencias que cruzan líneas base, la escritura vertical, los transforms singulares, el contenido desbalanceado, los glifos faltantes y los documentos que contienen campos de firma; el texto dentro de Form XObjects queda fuera del alcance de coincidencias de esta API
Con Atomic=True, cualquier coincidencia rechazada hace rollback de todas las coincidencias listas; con Atomic=False, las coincidencias listas pueden aplicarse mientras las rechazadas quedan sin cambios, y el resultado booleano sigue siendo False cuando alguna coincidencia fue rechazada
La preview usa y revierte una transacción de graph anidada, preservando una transacción existente del llamador; puede invalidar cachés del documento e invocar la notificación de modificación del documento aunque el contenido se restaure
Commit
Pasen el plan a ApplyLoadedPageTextReplacement para revalidar su fingerprint de contenido y de métricas de glifos antes de aplicar la solicitud en una transacción de graph
Recalculen el plan después de cada cambio de contenido; un plan desactualizado lanza EInvalidOpException sin aplicar sus reemplazos
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);