Token-Preserving Content-Stream AST
HPDFContentStream proporciona un modelo de sintaxis sin pérdidas y acotado para ediciones específicas de flujos de contenido PDF decodificados
Analizar e inspeccionar
HPDFParseContentStreamAST crea un THPDFContentStreamAST con límites predeterminados de 4,194,304 lexemas y 256 contenedores anidados; los llamadores que necesitan límites más estrictos pueden llamar a THPDFContentStreamAST.Create directamente
THPDFContentLexemeKind distingue espacios en blanco, comentarios, números, nombres, cadenas literales y hexadecimales, booleanos, nulos, palabras, delimitadores de contenedor, datos de imagen en línea y bytes malformados; cada byte de entrada pertenece exactamente a un THPDFContentLexeme
THPDFContentSyntaxNodeKind distingue la raíz, las operaciones, los operandos, las matrices, los diccionarios, los procedimientos, las imágenes en línea y las regiones malformadas; cada THPDFContentSyntaxNode usa índices de padre, primer hijo, último hijo y siguiente hermano para que el recorrido no asigne matrices de hijos
Usa GetLexeme, GetLexemeBytes, GetLexemeText y GetNode con LexemeCount y NodeCount; GetOriginalBytes devuelve una copia independiente del origen
Valid, ErrorOffset y ErrorMessage informan de la entrada malformada conservando la serialización exacta por bytes, y GetStatistics rellena THPDFContentASTStatistics con el tamaño del origen, los recuentos, la profundidad máxima, el recuento de imágenes en línea y el recuento de nodos malformados
Superposiciones de edición
ReplaceRange usa desplazamientos de bytes medio abiertos, mientras que ReplaceLexeme, ReplaceNode, DeleteNode, InsertBeforeNode e InsertAfterNode derivan los rangos de los registros de sintaxis
Cada THPDFContentEdit se copia en una superposición ordenada; las ediciones en conflicto se rechazan, los rangos adyacentes permanecen válidos, EditCount informa de las ediciones aceptadas y ClearEdits restaura la salida sin operación
Visitantes de operadores
HPDFVisitContentStreamOperators superpone devoluciones de llamada de visitante con recuento de referencias y de eventos Delphi sobre este AST, proporciona una vista de operandos de solo lectura, aplica presupuestos de origen, operador, lexema, profundidad y reemplazo, y vuelve a analizar la salida transformada antes de tener éxito
Serializar
Serialize crea una matriz de bytes de salida después de un cálculo de tamaño con comprobación de desbordamiento, mientras que WriteToStream escribe los tramos de origen sin tocar y los tramos de reemplazo directamente en un TStream propiedad del llamador
Sin ediciones, cualquiera de las dos rutas reproduce el origen byte a byte sin cambiar la ortografía numérica, los escapes de cadena, los comentarios, los finales de línea, los delimitadores ni las cargas útiles de imagen en línea
var
AST: THPDFContentStreamAST;
Output: TBytes;
begin
AST:= HPDFParseContentStreamAST(ContentBytes);
try
if AST.Valid and AST.ReplaceRange(StartOfs, EndOfs, ReplacementBytes) then
AST.Serialize(Output);
finally
AST.Free;
end;
end;