Metode THotPDF.DecodeLoadedStreamToStream
Mendekode stream PDF yang dimuat melalui rantai filter lengkapnya dan menulis tahap akhir langsung ke stream milik pemanggil
Deklarasi
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject;
Output: TStream; out Info: THPDFDecodePipelineInfo): Boolean; overload;
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject;
Output: TStream; CancellationToken: THPDFCancellationToken;
out Info: THPDFDecodePipelineInfo): Boolean; overload;
Unit
HPDFDoc
Parameter
| Nama | Tujuan |
|---|---|
AStream | THPDFStreamObject yang dimuat yang entri /Filter-nya didekode |
Output | Tujuan milik pemanggil yang menerima byte terdekode pada posisinya saat ini |
Info | Menerima jumlah byte masukan dan keluaran, jumlah filter, kedalaman, status, filter yang gagal, dan diagnostik |
Info | Menerima hitungan byte input dan output, hitungan filter, kedalaman, status, filter yang gagal, dan diagnostik |
Nilai balik
Mengembalikan True hanya ketika setiap tahap yang diminta berhasil
Catatan penggunaan
- Filter akhir menulis ke
Outputtanpa membuat stream memori akhir ukuran-penuh kedua - Tahap perantara menggunakan
THPDFAdaptiveTempStreamdan tumpah ke file sementara milik setelahLoadedStreamMemoryThreshold - Setiap tahap tetap berbatas oleh
DecodeBudgetBytesdan setiap byte yang didekode juga mengonsumsiDocumentDecodeBudgetBytes - ASCII85 memerlukan penanda akhir
~>yang tepat dan ASCIIHex memerlukan>; pipeline yang dimuat yang cacat gagal alih-alih menerima data terpotong DecodeFilterLimitmenolak array ukuran-berlebih sebelum alokasi tahapDecodePipelineDepthLimit, deteksi referensi-tidak-langsung siklik, dan deteksi rekursi stream-yang-sama membatasi grafik objek musuhan- Posisi stream sumber dipulihkan setelah keberhasilan atau kegagalan
- Tahap
IHPDFCustomStreamFilteryang terdaftar berbagi budget agregat dan kedalaman pipeline yang sama - Output push dan pull kustom diisolasi dalam stream sementara adaptif sampai tahap kustom itu berhasil
- Overload pembatalan mengembalikan
dpsCancelledalih-alih membocorkanEHPDFOperationCancelled - Tujuan streaming yang gagal dapat berisi byte yang sudah diterima sebelum kegagalan; gunakan tujuan sementara ketika keluaran atomik diperlukan
Diagnostik
THPDFDecodePipelineInfo = record
Status: THPDFDecodePipelineStatus;
InputBytes: Int64;
Status: THPDFDecodePipelineStatus;
InputBytes: Int64;
OutputBytes: Int64;
FilterCount: Integer;
AppliedFilterCount: Integer;
PipelineDepth: Integer;
StopBeforeLast: Boolean;
FailedFilter: AnsiString;
Diagnostic: AnsiString;
end;
Status membedakan stream dan filter yang tidak valid, batas jumlah-filter dan kedalaman, referensi siklik, stream rekursif, filter yang tidak didukung, kegagalan anggaran, dan kegagalan dekoder
Contoh
Output := TFileStream.Create('payload.bin', fmCreate);
try
if not PDF.DecodeLoadedStreamToStream(StreamObject, Output, Info) then
raise Exception.Create(String(Info.Diagnostic));
finally
Output.Free;
end;