type TPdfStreamInspector = class ... end;
| Konstruktor | Beschreibung |
|---|---|
Create(Source: TStream) | Liest eine seekbare PDF-Quelle unter den Standard-Budgets und stellt ihre ursprüngliche Position wieder her |
Create(Source: TStream; const Options: TPdfStreamInspectOptions) | Liest eine seekbare PDF-Quelle unter vom Aufrufer gewählten Budgets |
Create(const Data: TBytes) | Untersucht ein vorhandenes PDF-Byte-Array unter den Standard-Budgets |
Create(const Data: TBytes; const Options: TPdfStreamInspectOptions) | Untersucht ein vorhandenes PDF-Byte-Array unter vom Aufrufer gewählten Budgets |
| Methode | Beschreibung |
|---|---|
CopyRawData(Index, Destination, out Report) | Kopiert die vollständige kodierte Nutzlast eines Stream-Objekts |
CopyRawData(Index, Destination, Offset, Count, out Report) | Kopiert ein validiertes Byte-Fenster, ohne die Filterkette zu dekodieren |
DecodeData(Index, Destination, Level, out Report) | Liefert Rohdaten oder wendet unterstützte allgemeine Filter in Deklarationsreihenfolge an |
PdfStreamFilterKindFromName(Name) | Abbildet einen vollständigen oder abgekürzten PDF-Filternamen auf TPdfStreamFilterKind |
| Konstante | Wert | Zweck |
|---|---|---|
PdfStreamInspectDefaultSourceLimit | 512 MiB | Maximale vorgehaltene Quellgröße |
PdfStreamInspectDefaultRawLimit | 256 MiB | Maximale von einer Operation kopierte Roh-Nutzlast |
PdfStreamInspectDefaultDecodedLimit | 256 MiB | Maximale von einer Operation erzeugte dekodierte Nutzlast |
PdfStreamInspectDefaultExpansionRatio | 100 | Maximales Dekodier-zu-Kodier-Expansionverhältnis |
PdfStreamInspectDefaultMaxStreams | 1,000,000 | Maximale inventarisierte Stream-Objekte |
PdfStreamInspectDefaultDictionaryLimit | 1 MiB | Maximale für einen Stream inspizierte Dictionary-Bytes |
| Typ | Beschreibung |
|---|---|
TPdfStreamFilterKind | Klassifiziert Filter als psfkUnknown, psfkASCIIHex, psfkASCII85, psfkLZW, psfkFlate, psfkRunLength, psfkCCITTFax, psfkJBIG2, psfkDCT, psfkJPX, psfkCrypt oder psfkBrotli |
TPdfStreamNativeAccess | Wählt keinen nativen Pfad, Bildobjekt-Zugriff oder eingebettete-Datei-Zugriff |
TPdfStreamDecodeLevel | Wählt Roh-, unterstützte allgemeine Filter- oder erforderliche vollständige Ketten-Dekodierung |
TPdfStreamReadStatus | Meldet psrsCompleted, psrsPartiallyDecoded, psrsInvalidIndex, psrsInvalidRange, psrsSourceLimitExceeded, psrsRawLimitExceeded, psrsDecodedLimitExceeded, psrsExpansionRatioExceeded, psrsUnsupportedFilter, psrsUnsupportedDecodeParameters, psrsEncrypted, psrsExternalData, psrsMalformed oder psrsWriteError |
TPdfStreamFilterInfo | Filtername, Kind, HasDecodeParameters-DecodeParms-Präsenz, Predictor, Colors, BitsPerComponent, Columns und der LZW-EarlyChange-Wert |
TPdfStreamFilterInfos | Dynamisches Array von TPdfStreamFilterInfo-Records |
TPdfStreamInfo | Objektidentität (ObjectNumber, Generation, TypeName), Offsets und Längen (ObjectOffset, DictionaryOffset, DictionaryLength, RawOffset, RawLength, DecodedLengthHint), Layout-Flags (LengthIsIndirect, UsedEndStreamFallback), Verschlüsselungs- und External-File-Flags (HasExternalFile, IsEncryptedDocument), Typnamen (SubtypeName), native Grenze (NativeAccess mit psnaNone, psnaImageObject oder psnaEmbeddedFile) und die deklarierte Filters-Kette |
TPdfStreamInfos | Dynamisches Array von TPdfStreamInfo-Records |
TPdfStreamInspectOptions | Vom Aufrufer gewählte Quell-, Nutzlast- (MaxRawBytes, MaxDecodedBytes), Expansions- (MaxExpansionRatio), Objektanzahl- (MaxStreams), Dictionary- (MaxDictionaryBytes), Token- (MaxTokens), Allokations- (MaxAllocationBytes) und DeadlineMilliseconds-Frist-Budgets mit einem statischen Default-Initialisierer |
TPdfStreamReadReport | Status, Byte-Zähler (InputByteCount, OutputByteCount), angewendete und verbleibende Filteranzahl (AppliedFilterCount, RemainingFilterCount), fehlgeschlagener Filterindex (FailedFilterIndex) und ErrorMessage-Text für einen Lesevorgang |
| Member | Typ | Beschreibung |
|---|---|---|
Count | Integer | Anzahl der in der Quelle gefundenen physischen Stream-Objekte oder Revisionen |
Infos[Index] | TPdfStreamInfo | Objektnummer, Generation, Offsets, Längen, Filter, DecodeParms und Klassifizierung des nativen Zugriffs |
Encrypted | Boolean | Ob der Trailer eine Dokumentverschlüsselung deklariert |
Options | TPdfStreamInspectOptions | Normalisierte Ressourcen-Budgets, die der Inspector verwendet |
SourceByteCount | Int64 | Anzahl der zur Inspektion vorgehaltenen Eingabe-Bytes |
psdlRaw kopiert die kodierten Stream-Bytes, ohne Filter anzuwendenpsdlGeneral wendet ASCIIHex, ASCII85, LZW, Flate, RunLength, TIFF-8-bit- und PNG-Predictors an und liefert dann psrsPartiallyDecoded, wenn ein Bild- oder unbekannter Codec verbleibtpsdlFull verlangt, dass die vollständige Kette unterstützte allgemeine Filter verwendet, und liefert andernfalls psrsUnsupportedFilterpsnaImageObject leitet Dokument-Level-Aufrufer an die nativen FPDFImageObj_GetImageDataRaw-, FPDFImageObj_GetImageDataDecoded- und Bildfilter-APIspsnaEmbeddedFile leitet Anhang-Aufrufer an den nativen FPDFAttachment_GetFile-PfadpsrsEncrypted, weil die öffentliche native ABI keinen beliebigen indirekten Stream per Objektnummer entschlüsseltTPdfStreamInspectOptions.Default kombiniert seine Quell-, Nutzlast-, Expansions-, Dictionary- und Stream-Obergrenzen mit der aktuellen TPdfParserResourceBudget-Richtlinie für Token, Objekte, dekodierte Bytes, Expansionsverhältnis, Allokation und Frist
TPdfStreamReadReport zeichnet Status, Ein- und Ausgabe-Byte-Zähler, angewendete und verbleibende Filter, den fehlgeschlagenen Filterindex und Schreibfehler am Ziel auf
Die aktuelle Implementierung behält eine begrenzte Quellkopie vor, um zuverlässige Auflösung indirekter Längen und wiederholbare zufällige Stream-Lesevorgänge zu unterstützen; verwenden Sie ein niedrigeres MaxSourceBytes, wenn Sie nicht vertrauenswürdige Uploads unter einem knapperen Speicherbudget verarbeiten
var
Inspector: TPdfStreamInspector;
Output: TMemoryStream;
Report: TPdfStreamReadReport;
begin
Inspector := TPdfStreamInspector.Create(PdfBytes);
Output := TMemoryStream.Create;
try
if Inspector.Count > 0 then
Inspector.DecodeData(0, Output, psdlGeneral, Report);
finally
Output.Free;
Inspector.Free;
end;
end;