Méthode THotPDF.DecodeLoadedStreamToStream
Décode un flux PDF chargé à travers sa chaîne de filtres complète et écrit l’étape finale directement dans un flux propriétaire de l’appelant
Déclaration
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
Paramètres
| Nom | Rôle |
|---|---|
AStream | THPDFStreamObject chargé dont l’entrée /Filter est décodée |
Output | Caller-owned destination that receives decoded bytes at its current position |
Output | Destination propriétaire de l’appelant qui reçoit les octets décodés à sa position courante |
Info | Reçoit les comptes d’octets d’entrée et de sortie, les comptes de filtres, la profondeur, l’état, le filtre défaillant et les diagnostics |
Valeur de retour
Renvoie True uniquement lorsque chaque étape demandée réussit
Notes d’utilisation
- Le filtre final écrit dans
Outputsans créer un second flux mémoire final en pleine taille - Les étapes intermédiaires restent bornées par
DecodeBudgetByteset chaque octet décodé consomme égalementDocumentDecodeBudgetBytes - Chaque étape reste bornée par
DecodeBudgetByteset chaque octet décodé consomme égalementDocumentDecodeBudgetBytes - ASCII85 exige un marqueur de fin
~>exact et ASCIIHex exige>; un pipeline chargé malformé échoue au lieu d’accepter des données tronquées DecodeFilterLimitrejette les tableaux surdimensionnés avant l’allocation des étapesDecodePipelineDepthLimit, la détection de références indirectes cycliques et la détection de récursion sur le même flux bornent les graphes d’objets hostiles- La position du flux source est restaurée après succès ou échec
- Les étapes
IHPDFCustomStreamFilterenregistrées partagent les mêmes budgets agrégés et la même profondeur de pipeline - La sortie push et pull personnalisée est isolée dans un flux temporaire adaptatif jusqu’au succès de cette étape personnalisée
- La surcharge avec annulation renvoie
dpsCancelledau lieu de laisser fuirEHPDFOperationCancelled - Une destination de flux défaillante peut contenir des octets déjà acceptés avant l’échec ; utilisez une destination temporaire lorsqu’une sortie atomique est requise
Diagnostics
THPDFDecodePipelineInfo = record
Status: THPDFDecodePipelineStatus;
InputBytes: Int64;
OutputBytes: Int64;
FilterCount: Integer;
AppliedFilterCount: Integer;
PipelineDepth: Integer;
StopBeforeLast: Boolean;
FailedFilter: AnsiString;
Diagnostic: AnsiString;
end;
Status distingue les flux et filtres invalides, les limites de compte de filtres et de profondeur, les références cycliques, les flux récursifs, les filtres non pris en charge, les échecs de budget et les échecs de décodeur
Exemple
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;