function ReadAttachmentMetadata(MaxAttachments: Integer = 10000): TPdfAttachmentMetadataArray;
Die Methode zählt die Anhänge auf Dokumentebene einmal auf und gibt Records im Eigentum des Aufrufers zurück, die Index, Name, Description, MimeType, Relationship, die dekodierte Size und Readable enthalten
MaxAttachments wird geprüft, bevor das Ergebnisarray gefüllt wird, sodass ein nicht vertrauenswürdiges Dokument keine unbegrenzte Metadatenzuweisung auslösen kann
Die Größenabfrage kopiert keine Nutzdaten-Bytes in den Speicher von PDFium Delphi Component, obwohl PDFium intern einen Stream dekodieren kann, um seine dekodierte Länge zu bestimmen
function ExtractAttachmentsToStreams(const Destinations: array of TStream; const Options: TPdfAttachmentBatchOptions; out Report: TPdfAttachmentBatchReport; const CancellationToken: IPdfCancellationToken = nil): Boolean;
Destinations muss genau einen Slot pro Dokumentanhang enthalten und folgt derselben nullbasierten Reihenfolge wie Attachment[Index]
Ein nil-Ziel markiert das Element als paesSkipped, sodass Aufrufer Anhänge ohne zweite Aufzählung auswählen können
Jeder nicht leere Nutzdateninhalt wird durch PDFium in einen temporären Puffer von PDFium Delphi Component dekodiert und dann stückweise in ChunkBytes-Größe aus diesem Puffer geschrieben
Der Puffer wird vor dem nächsten Anhang freigegeben, sodass PDFium Delphi Component den gesamten Stapel nie zurückhält; die öffentliche PDFium-Anhangs-API unterstützt keine Bereichslesevorgänge und kann intern ihren eigenen Voll-Nutzdaten-Dekodierspeicher verwenden
Streams bleiben im Eigentum des Aufrufers, das Schreiben beginnt an der jeweiligen aktuellen Stream-Position, und die Methode spult sie nicht zurück und schneidet sie nicht ab
Ein Abbruch oder eine Ziel-Exception kann Bytes zurücklassen, die bereits in diesen Stream geschrieben wurden; Aufrufer, die transaktionelle Ausgaben benötigen, sollten daher temporäre Streams bereitstellen und diese erst nach einem erfolgreichen Report veröffentlichen
| Feld | Standard | Bedeutung |
|---|---|---|
MaxAttachments | 10000 | Maximale Anzahl an Metadaten- und Report-Einträgen |
MaxFileBytes | 256 MiB | Maximale dekodierte Größe eines Anhangs |
MaxTotalBytes | 1 GiB | Maximale Byteanzahl, die über alle Ziele hinweg geschrieben wird |
ChunkBytes | 1 MiB | Maximale Byteanzahl, die an einen einzigen Stream-Schreibvorgang übergeben wird |
StopOnError | True | Nach dem ersten nicht lesbaren, das Budget überschreitenden oder schreibfehlerhaften Element anhalten |
Jeder TPdfAttachmentMetadata-Record beschreibt einen nativen Anhang, und TPdfAttachmentMetadataArray speichert den Metadaten-Schnappschuss
Jeder TPdfAttachmentBatchItem kombiniert Metadaten, einen TPdfAttachmentExtractionState, geschriebene Bytes und Fehlertext, während TPdfAttachmentBatchItems alle Einzelergebnisse speichert
Die TPdfAttachmentExtractionState-Werte sind paesNotProcessed, paesSkipped, paesExtracted, paesUnreadable, paesFileLimit, paesAggregateLimit, paesCancelled und paesWriteFailed
Der TPdfAttachmentBatchReport zählt AttachmentCount, ExtractedCount, SkippedCount und FailedCount sowie BytesWritten und PeakBufferBytes
Completed bedeutet, dass jedes Element einen Endzustand ohne Abbruch erreicht hat, während das Funktionsergebnis zusätzlich FailedCount = 0 verlangt
PeakBufferBytes meldet den größten Nutzdatenpuffer von PDFium Delphi Component und schließt den privaten Speicher nicht ein, den PDFium während der Dekodierung verwendet
var Options: TPdfAttachmentBatchOptions;
var Report: TPdfAttachmentBatchReport;
Options := TPdfAttachmentBatchOptions.Default;
Options.MaxFileBytes := 64 * 1024 * 1024;
Options.MaxTotalBytes := 256 * 1024 * 1024;
if not Pdf1.ExtractAttachmentsToStreams(Destinations, Options, Report) then
HandleAttachmentBatchFailure(Report);