Zachowująca tokeny AST strumienia treści
HPDFContentStream dostarcza ograniczony, bezstratny model składni dla celowanych edycji zdekodowanych strumieni treści PDF
Parsowanie i inspekcja
HPDFParseContentStreamAST tworzy THPDFContentStreamAST z domyślnymi limitami 4 194 304 leksemów i 256 zagnieżdżonych kontenerów; wywołujący potrzebujący ostrzejszych limitów mogą wywołać THPDFContentStreamAST.Create bezpośrednio
THPDFContentLexemeKind rozróżnia białe znaki, komentarze, liczby, nazwy, literały łańcuchowe i szesnastkowe, wartości boolowskie, null-e, słowa, ograniczniki kontenerów, dane obrazów inline oraz źle uformowane bajty; każdy bajt wejściowy należy do dokładnie jednego THPDFContentLexeme
THPDFContentSyntaxNodeKind rozróżnia korzeń, operacje, argumenty, tablice, słowniki, procedury, obrazy inline i regiony źle uformowane; każdy THPDFContentSyntaxNode używa indeksów rodzica, pierwszego dziecka, ostatniego dziecka i następnego rodzeństwa, więc przechodzenie nie alokuje tablic dzieci
Używaj GetLexeme, GetLexemeBytes, GetLexemeText i GetNode wraz z LexemeCount i NodeCount; GetOriginalBytes zwraca niezależną kopię źródła
Valid, ErrorOffset i ErrorMessage raportują źle uformowane wejście, zachowując serializację zgodną bajt w bajt, a GetStatistics wypełnia THPDFContentASTStatistics rozmiarem źródła, licznikami, maksymalną głębokością, liczbą obrazów inline i liczbą węzłów źle uformowanych
Nakładki edycji
ReplaceRange używa półotwartych offsetów bajtów, podczas gdy ReplaceLexeme, ReplaceNode, DeleteNode, InsertBeforeNode i InsertAfterNode wyprowadzają zakresy z rekordów składni
Każda THPDFContentEdit jest kopiowana do posortowanej nakładki; sprzeczne edycje są odrzucane, przyległe zakresy pozostają ważne, EditCount raportuje przyjęte edycje, a ClearEdits przywraca wyjście no-op
Odwiedzający operatorów
HPDFVisitContentStreamOperators nakłada na tę AST odwiedzającego z licznikiem odwołań i wywołania zwrotne zdarzeń Delphi, dostarcza widok argumentów tylko do odczytu, wymusza budżety źródła, operatorów, leksemów, głębokości i zastępowań, a przed sukcesem ponownie parsuje przekształcone wyjście
Serializacja
Serialize tworzy jedną wyjściową tablicę bajtów po obliczeniu rozmiaru z kontrolą przepełnienia, podczas gdy WriteToStream zapisuje nietkane zakresy źródła i zakresy zastąpień bezpośrednio do strumienia TStream należącego do wywołującego
Bez edycji każda z tych ścieżek odtwarza źródło bajt w bajt, nie zmieniając zapisu liczb, eskapów łańcuchów, komentarzy, końców linii, ograniczników ani ładunków obrazów inline
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;