Tokenbevarende indholdsstrøm-AST
HPDFContentStream leverer en afgrænset tabsfri syntaksmodel til målrettede redigeringer af afkodede PDF-indholdsstrømme
Parsing og inspektion
HPDFParseContentStreamAST opretter en THPDFContentStreamAST med standardgrænser på 4.194.304 lexemer og 256 indlejrede containere; kaldere, der har brug for strammere grænser, kan kalde THPDFContentStreamAST.Create direkte
THPDFContentLexemeKind skelner mellem whitespace, kommentarer, tal, navne, literale og hexadecimal strenge, booleans, nuller, ord, containerafgrænsere, inline-billeddata og fejlformede bytes; hver inputbyte hører til præcis én THPDFContentLexeme
THPDFContentSyntaxNodeKind skelner mellem roden, operationer, operander, arrays, dictionaries, procedurer, inline-billeder og fejlformede regioner; hver THPDFContentSyntaxNode bruger parent-, first-child-, last-child- og next-sibling-indekser, så traversering ikke allokerer børnearrays
Brug GetLexeme, GetLexemeBytes, GetLexemeText og GetNode sammen med LexemeCount og NodeCount; GetOriginalBytes returnerer en uafhængig kildekopi
Valid, ErrorOffset og ErrorMessage rapporterer fejlform input, samtidig med at byte-eksakt serialisering fastholdes, og GetStatistics fylder THPDFContentASTStatistics med kildestørrelse, tællere, maksimal dybde, antal inline-billeder og antal fejlformede noder
Redigerings-overlays
ReplaceRange bruger halvåbne byte-offsets, mens ReplaceLexeme, ReplaceNode, DeleteNode, InsertBeforeNode og InsertAfterNode afleder ranges fra syntax-poster
Hver THPDFContentEdit kopieres ind i et sorteret overlay; konflikterende redigeringer afvises, tilstødende ranges forbliver gyldige, EditCount rapporterer accepterede redigeringer, og ClearEdits gendanner no-op-output
Operator-besøgende
HPDFVisitContentStreamOperators lægger referenceoptalte visitor- og Delphi event-callbacks oven på denne AST, leverer et skrivebeskyttet operand-view, håndhæver kilde-, operator-, lexeme-, dybde- og erstatningsbudgetter og reparser det transformerede output, før den melder succes
Serialisering
Serialize opretter ét output-byte-array efter en overflow-tjekket størrelsesberegning, mens WriteToStream skriver urørte kildespænd og erstatningsspænd direkte til en kalder-ejet TStream
Uden redigeringer genskaber begge veje kilden byte for byte uden at ændre numerisk stavemåde, string-escapes, kommentarer, linjeafslutninger, afgrænsere eller inline-billedpayloads
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;