PDFium Delphi Component API Reference

Wsadowa ekstrakcja załączników

Component: TPdf  ·  Unit: PDFium
Jednorazowo inwentaryzuje osadzone załączniki i zapisuje ich zdekodowane zawartości do strumieni należących do wywołującego, w ramach jawnych kontroli zasobów

ReadAttachmentMetadata

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

ExtractAttachmentsToStreams

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

Options

FieldDefaultMeaning
MaxAttachments10000Maksymalna liczba wpisów metadanych i raportu
MaxFileBytes256 MiBMaksymalny zdekodowany rozmiar jednego załącznika
MaxTotalBytes1 GiBMaksymalna liczba bajtów zapisanych łącznie do wszystkich celów
ChunkBytes1 MiBMaksymalna liczba bajtów przekazywana do jednego zapisu strumienia
StopOnErrorTrueZatrzymuje się po pierwszym elemencie nieczytelnym, przekraczającym budżet lub nieudanym na etapie zapisu

Report

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

Example

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);

See Also

Attachment, AttachmentCount, AttachmentDescription, AttachmentName, AttachmentType