function ReadAttachmentMetadata(MaxAttachments: Integer = 10000): TPdfAttachmentMetadataArray;
Metoda jednokrotnie wylicza załączniki poziomu dokumentu i zwraca rekordy należące do wywołującego, zawierające Index, Name, Description, MimeType, Relationship, zdekodowany Size oraz Readable
MaxAttachments jest sprawdzane przed wypełnieniem tablicy wynikowej, co uniemożliwia niezaufanemu dokumentowi wymuszenie nieograniczonej alokacji metadanych
Zapytanie o rozmiar nie kopiuje bajtów zawartości do pamięci PDFium Delphi Component, choć PDFium może wewnętrznie zdekodować strumień, aby ustalić jego długość po dekodowaniu
function ExtractAttachmentsToStreams(const Destinations: array of TStream; const Options: TPdfAttachmentBatchOptions; out Report: TPdfAttachmentBatchReport; const CancellationToken: IPdfCancellationToken = nil): Boolean;
Destinations musi zawierać dokładnie jedno gniazdo na każdy załącznik dokumentu i trzyma się tej samej kolejności od zera co Attachment[Index]
Docelowe nil oznacza dany element jako paesSkipped, dzięki czemu wywołujący może wybrać załączniki bez drugiego wyliczania
Każda niepusta zawartość jest dekodowana przez PDFium do jednego tymczasowego bufora PDFium Delphi Component, a następnie zapisywana z tego bufora w porcjach ChunkBytes
Bufor jest zwalniany przed przejściem do kolejnego załącznika, więc PDFium Delphi Component nigdy nie trzyma całej partii naraz, ale publiczne API załączników PDFium nie obsługuje odczytów zakresowych i może wewnętrznie użyć własnej pamięci pełnego dekodowania zawartości
Strumienie pozostają własnością wywołującego, zapis zaczyna się od bieżącej pozycji każdego strumienia, a metoda nie przewija ich ani nie skraca
Anulowanie lub wyjątek strumienia docelowego może zostawić bajty już zapisane w tym strumieniu, więc wywołujący wymagający wyjścia transakcyjnego powinni dostarczać strumienie tymczasowe i publikować je dopiero po pomyślnym raporcie
| Field | Default | Meaning |
|---|---|---|
MaxAttachments | 10000 | Maksymalna liczba wpisów metadanych i raportu |
MaxFileBytes | 256 MiB | Maksymalny zdekodowany rozmiar jednego załącznika |
MaxTotalBytes | 1 GiB | Maksymalna liczba bajtów zapisanych łącznie do wszystkich celów |
ChunkBytes | 1 MiB | Maksymalna liczba bajtów przekazywana do jednego zapisu strumienia |
StopOnError | True | Zatrzymuje się po pierwszym elemencie nieczytelnym, przekraczającym budżet lub nieudanym na etapie zapisu |
Każdy rekord TPdfAttachmentMetadata opisuje jeden natywny załącznik, a TPdfAttachmentMetadataArray przechowuje snapshot metadanych
Każdy TPdfAttachmentBatchItem łączy metadane, stan TPdfAttachmentExtractionState, liczbę zapisanych bajtów i ewentualny tekst błędu, a TPdfAttachmentBatchItems przechowuje wszystkie wyniki per element
Wartości TPdfAttachmentExtractionState to paesNotProcessed, paesSkipped, paesExtracted, paesUnreadable, paesFileLimit, paesAggregateLimit, paesCancelled i paesWriteFailed
TPdfAttachmentBatchReport zlicza AttachmentCount, ExtractedCount, SkippedCount i FailedCount obok BytesWritten i PeakBufferBytes
Completed oznacza, że każdy element osiągnął stan końcowy bez anulowania, podczas gdy wynik funkcji dodatkowo wymaga FailedCount = 0
PeakBufferBytes raportuje największy bufor zawartości PDFium Delphi Component i nie obejmuje prywatnej pamięci użytej przez PDFium podczas dekodowania
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);