Token-megőrző tartalomfolyam-AST
A HPDFContentStream korlátozott veszteségmentes szintaxismodellt biztosít a dekódolt PDF tartalomfolyamok célzott szerkesztéséhez
Elemzés vizsgálat
A HPDFParseContentStreamAST egy THPDFContentStreamAST objektumot hoz létre alapértelmezett 4 194 304 lexéma és 256 beágyazott tároló korláttal; a szigorúbb korlátokat igénylő hívók közvetlenül hívhatják a THPDFContentStreamAST.Create metódust
A THPDFContentLexemeKind megkülönbözteti a szóközöket, megjegyzéseket, számokat, neveket, literál- és hexadecimális sztringeket, logikai értékeket, nullákat, szavakat, tároló-elválasztókat, beágyazott képadatokat és hibás bájtokat; minden bemeneti bájt pontosan egy THPDFContentLexeme objektumhoz tartozik
A THPDFContentSyntaxNodeKind megkülönbözteti a gyökeret, a műveleteket, az operandusokat, a tömböket, a szótárakat, az eljárásokat, a beágyazott képeket és a hibás régiókat; minden THPDFContentSyntaxNode szülő-, első-gyermek-, utolsó-gyermek- és következő-testvér indexeket használ, így a bejárás nem foglal le gyermektömböket
Használja a GetLexeme, GetLexemeBytes, GetLexemeText és GetNode metódusokat a LexemeCount és NodeCount értékekkel; a GetOriginalBytes független forrásmásolatot ad vissza
A Valid, ErrorOffset és ErrorMessage a hibás bemenetet jelenti, miközben megtartja a bájt-pontos szerializációt, a GetStatistics pedig a THPDFContentASTStatistics értéket tölti meg forrásmérettel, számlálókkal, maximális mélységgel, beágyazott kép-számmal és hibás csomópont-számmal
Szerkesztés-átfedések
A ReplaceRange félnyitott bájteltolásokat használ, míg a ReplaceLexeme, ReplaceNode, DeleteNode, InsertBeforeNode és InsertAfterNode a tartományokat szintaxisrekordokból származtatja
Minden THPDFContentEdit egy rendezett átfedésbe másolódik; az ütköző szerkesztések elutasításra kerülnek, a szomszédos tartományok érvényesek maradnak, az EditCount az elfogadott szerkesztéseket jelenti, a ClearEdits pedig visszaállítja a művelet nélküli kimenetet
Operátor-látogatók
A HPDFVisitContentStreamOperators referenciaszámlált látogató- és Delphi esemény-visszahívásokat rétegez erre az AST-re, csak olvasható operandusnézetet biztosít, forrás-, operátor-, lexéma-, mélység- és csere-költségvetéseket érvényesít, és a sikeres előtt újra elemzi a transzformált kimenetet
Szerializálás
A Serialize egy kimeneti bájttömböt hoz létre egy túlcsordulás-ellenőrzött méretszámítás után, míg a WriteToStream az érintetlen forrástartományokat és a csere-tartományokat közvetlenül egy hívó tulajdonában lévő TStream objektumba írja
Szerkesztések nélkül bármelyik út bájtra pontosan reprodukálja a forrást anélkül, hogy megváltoztatná a numerikus helyesírást, a sztring-átkódolásokat, a megjegyzéseket, a sorvégeket, az elválasztókat vagy a beágyazott kép-adatcsomagokat
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;