procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean = False);
procedure LoadCustomDocument(AStream: TStream; AOwnsStream: Boolean; const Options: TPdfLoadOptions; out Report: TPdfLoadReport);
LoadCustomDocument е потоковият двойник на буферираните
LoadDocument претоварвания. Основата му е входната точка
FPDF_LoadCustomDocument на PDFium, достъпна чрез помощния клас
TPdfStreamAdapter, въведен във v1.8.0. PDFium издърпва блокове от AStream едва когато са нужни, така че
потокът не се копира в паметта: TFileStream върху 4 GB
PDF, TStream върху HTTP или BLOB поток от база данни стават
използваеми, без първо да се побере целият payload в RAM
AStream трябва да поддържа позициониране. Животът му трябва да продължи
до затварянето на документа (извикайте UnloadDocument или върнете
Active на False). Подайте
AOwnsStream = True, за да прехвърлите притежанието на потока към този
TPdf — адаптерът тогава освобождава AStream, когато се изпълни
UnloadDocument. Подайте False, когато
извикващият иска да запази потока жив и след затварянето на документа
LoadCustomDocument съзнателно е отделен метод (а не още едно
претоварване на LoadDocument), така че извикващи, подаващи наследник на TMemoryStream,
не могат случайно да се закачат за буферираното
LoadDocument(TMemoryStream, Boolean) претоварване — формата на аргументите в Pascal е същата,
но семантиките са коренно различни
(буферирано срещу при поискване)
Претоварването с политика прилага същите съвместим, строг или възстановителен режим и ограничен xref одит, документирани при LoadDocument. Одитът използва позиционирани четения и възстановява курсора на източника, преди PDFium да продължи достъпа си при поискване
TPdfLoadOptions носи Mode, AuditByteLimit, MaxIssues, MaxXrefSections, MaxXrefEntries, MaxObjectNumber, ValidateObjectOffsets и RequireFinalEndOfFileMarker, плюс class function-а Default
Password преди извикване на LoadCustomDocument при отваряне на криптирани документиAStream — той може да е TFileStream, TMemoryStream или всеки наследник на TStream, който спазва Seek и ReadAOwnsStream = True
// Streaming load with stream ownership transferred to Pdf1
var
Stream: TFileStream;
begin
Stream := TFileStream.Create('C:\Huge.pdf', fmOpenRead or fmShareDenyWrite);
Pdf1.LoadCustomDocument(Stream, True); // Pdf1 frees Stream on UnloadDocument
Pdf1.Active := True;
ShowMessage('Pages: ' + IntToStr(Pdf1.PageCount));
end;
// Externally-owned stream — caller frees it after UnloadDocument
var
Stream: TFileStream;
begin
Stream := TFileStream.Create('C:\Live.pdf', fmOpenRead or fmShareDenyNone);
try
Pdf1.LoadCustomDocument(Stream, False);
Pdf1.Active := True;
DoWork;
Pdf1.Active := False;
finally
Stream.Free;
end;
end;