Token-behoudende inhoudsstroom-AST
HPDFContentStream biedt een begrensd verliesvrij syntaxisModel voor gerichte bewerkingen van gedecodeerde PDF-inhoudsstromen
Parseren en inspecteren
HPDFParseContentStreamAST maakt een THPDFContentStreamAST met standaardlimieten van 4.194.304 lexemen en 256 geneste containers; aanroepers die strakkere limieten nodig hebben kunnen THPDFContentStreamAST.Create rechtstreeks aanroepen
THPDFContentLexemeKind onderscheidt witruimte, commentaar, nummers, namen, literale en hexadecimale tekenreeksen, booleans, nullen, woorden, containerscheidingstekens, inline-afbeeldingsdata en misvormde bytes; elke invoerbyte behoort tot exact één THPDFContentLexeme
THPDFContentSyntaxNodeKind onderscheidt de wortel, bewerkingen, operanden, arrays, woordenboeken, procedures, inline-afbeeldingen en misvormde gebieden; elke THPDFContentSyntaxNode gebruikt ouder-, eerste-kind-, laatste-kind- en volgende-broer indexes zodat traversering geen kinderarrays toewijst
Gebruik GetLexeme, GetLexemeBytes, GetLexemeText en GetNode met LexemeCount en NodeCount; GetOriginalBytes geeft een onafhankelijke bronkopie terug
Valid, ErrorOffset en ErrorMessage rapporteren misvormde invoer terwijl byte-exacte serialisatie behouden blijft, en GetStatistics vult THPDFContentASTStatistics met bronsgrootte, aantallen, maximale diepte, inline-afbeeldingaantal en misvormd-knoopaantal
Bewerk overlays
ReplaceRange gebruikt half-open byte-verschuivingen, terwijl ReplaceLexeme, ReplaceNode, DeleteNode, InsertBeforeNode en InsertAfterNode bereiken afleiden uit syntaxisrecords
Elke THPDFContentEdit wordt gekopieerd naar een gesorteerde overlay; conflicterende bewerkingen worden geweigerd, aangrenzende bereiken blijven geldig, EditCount rapporteert geaccepteerde bewerkingen, en ClearEdits herstelt no-op uitvoer
Operatorbezoekers
HPDFVisitContentStreamOperators legt referentietelling-bezoeker- en Delphi-gebeurteniscallbacks over deze AST, biedt een alleen-lezen operandweergave, handhaaft bron-, operator-, lexeem-, diepte- en vervangingsbudgetten, en parseert getransformeerde uitvoer opnieuw vóór succes
Serialiseren
Serialize maakt één uitvoerbytearray na een overloopgecontroleerde grootteberekening, terwijl WriteToStream onaangetaste bronbereiken en vervangingsbereiken rechtstreeks naar een in eigendom van de aanroeper zijnde TStream schrijft
Zonder bewerkingen reproduceert elk pad de bron byte voor byte zonder numerieke spelling, tekenreeks-escales, commentaar, regeleinden, scheidingstekens of inline-afbeeldingspayloads te wijzigen
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;