THotPDF.DecodeLoadedStreamToStream Yöntemi
Yüklenen bir PDF akışını kendi eksiksiz süzgeç zinciri üzerinden kod çözer ve son aşamayı doğrudan çağırana ait bir akışa yazar
Bildirim
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject; Output: TStream; out Info: THPDFDecodePipelineInfo): boolean;
Birim
HPDFDoc
Parametreler
| Ad | Amaç |
|---|---|
AStream | /Filter girdisi çözülen yüklenen THPDFStreamObject |
Output | Çözülen baytları geçerli konumunda alan, çağıranın sahibi olduğu hedef |
CancellationToken | Özel filtre aşamalarıyla paylaşılan, isteğe bağlı işbirlikçi iptal |
Info | Giriş ve çıkış bayt sayılarını, filtre sayılarını, derinliği, durumu, başarısız filtreyi ve tanılamaları alır |
Dönüş değeri
Yalnızca istenen her aşama başarılı olduğunda True döndürür
Kullanım notları
- Son filtre, ikinci bir tam boyutlu nihai bellek stream'i oluşturmadan
Output'a yazar - Ara aşamalar
THPDFAdaptiveTempStreamkullanır veLoadedStreamMemoryThresholdsonrasında kendi sahibi geçici dosyalara taşar - Her aşama
DecodeBudgetBytesile sınırlıdır ve çözülen her bayt aynı zamandaDocumentDecodeBudgetBytes'i de tüketir - ASCII85 tam bir
~>bitiş işareti, ASCIIHex ise>ister; bozuk yüklenen hatlar kesik veriyi kabul etmek yerine başarısız olur DecodeFilterLimit, aşama ayırmadan önce aşırı büyük dizileri reddederDecodePipelineDepthLimit, döngüsel indirect referans algılama ve aynı-stream özyineleme algılaması, düşmanca nesne grafiklerini sınırlar- Başarı veya başarısızlık sonrasında kaynak stream konumu eski haline getirilir
- Kayıtlı
IHPDFCustomStreamFilteraşamaları aynı toplam bütçeleri ve hattı derinliğini paylaşır - Özel push ve pull çıktısı, o özel aşama başarılı olana dek uyarlanabilir bir geçici stream içinde izole edilir
- İptal overload'ı
EHPDFOperationCancelledsızdırmak yerinedpsCancelleddöndürür - Başarısız bir streaming hedefi, hatadan önce kabul edilmiş baytlar içerebilir; atomik çıktı gerektiğinde geçici bir hedef kullanın
Tanılama
THPDFDecodePipelineInfo = record
Status: THPDFDecodePipelineStatus;
InputBytes: Int64;
OutputBytes: Int64;
FilterCount: Integer;
AppliedFilterCount: Integer;
PipelineDepth: Integer;
StopBeforeLast: Boolean;
FailedFilter: AnsiString;
Diagnostic: AnsiString;
end;
Status, geçersiz akışları ve süzgeçleri, süzgeç sayısı ve derinlik sınırlarını, döngüsel başvuruları, özyinelemeli akışları, desteklenmeyen süzgeçleri, bütçe başarısızlıklarını ve kod çözücü başarısızlıklarını ayırt eder
Örnek
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;