AST för innehållsström med bevarade token
HPDFContentStream tillhandahåller en begränsad förlustfri syntaxmodell för riktade redigeringar av avkodade PDF-innehållsströmmar
Parsning och inspektion
HPDFParseContentStreamAST skapar en THPDFContentStreamAST med standardgränser på 4 194 304 lexem och 256 nästlade behållare; anropare som behöver snävare gränser kan anropa THPDFContentStreamAST.Create direkt
THPDFContentLexemeKind skiljer blanktecken, kommentarer, tal, namn, literal- och hexadecimala strängar, booleska värden, nollvärden, ord, behållaravgränsare, inline-bilddata och felformade byte; varje indatabyte tillhör exakt ett THPDFContentLexeme
THPDFContentSyntaxNodeKind skiljer roten, operationer, operander, arrayer, ordlistor, procedurer, inline-bilder och felformade regioner; varje THPDFContentSyntaxNode använder index för förälder, första barn, sista barn och nästa syskon så att genomgången inte allokerar undernode-arrayer
Använd GetLexeme, GetLexemeBytes, GetLexemeText och GetNode med LexemeCount och NodeCount; GetOriginalBytes returnerar en oberoende källkopia
Valid, ErrorOffset och ErrorMessage rapporterar felformad indata samtidigt som byte-exakt serialisering behålls, och GetStatistics fyller THPDFContentASTStatistics med källstorlek, antal, maximalt djup, antal inline-bilder och antal felformade noder
Redigering av överlägg
ReplaceRange använder halvöppna byte-förskjutningar, medan ReplaceLexeme, ReplaceNode, DeleteNode, InsertBeforeNode och InsertAfterNode härleder intervall från syntaxposterna
Varje THPDFContentEdit kopieras till ett sorterat överlägg; motstridiga redigeringar avvisas, angränsande intervall förblir giltiga, EditCount rapporterar accepterade redigeringar och ClearEdits återställer utdata utan åtgärd
Operatorbesökare
HPDFVisitContentStreamOperators lägger referensräknade besökare och Delphi-händelseåterupprop ovanpå detta AST, tillhandahåller en skrivskyddad operandvy, verkställer budgetar för källa, operator, lexem, djup och ersättning, samt omtolkar transformerad utdata innan det lyckas
Serialisera
Serialize skapar en utdatabyte-array efter en översvämningskontrollerad storleksberäkning, medan WriteToStream skriver ohanterade källsegment och ersättningsegment direkt till en anroparägd TStream
Utan redigeringar återger båda vägarna källan byte för byte utan att ändra numerisk stavning, strängescape, kommentarer, radslut, avgränsare eller inline-bildnyttolaster
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;