type TPdfProgressiveDocument = class(TPdf) ... end;
| Method | Description |
|---|---|
Create | 建立文件元件與其擁有的範圍請求排程器 |
Destroy | 在釋放繼承的文件資源之前取消漸進狀態 |
BeginProgressiveLoad(AStream, AFileSize, AOwnsStream, AInitialAvailableByteCount) | 建立原生可用性提供者,並將邏輯最終大小與目前已儲存的位元組分開處理 |
CheckDocumentAvailability | 傳回 pdaAvailable、pdaNotAvailable 或 pdaError,並傳回 PDFium 請求的合併位元組範圍 |
OpenProgressiveDocument | 透過 FPDFAvail_GetDocument 開啟線性化 PDF,或透過 FPDF_LoadCustomDocument 開啟已完整接收的非線性化 PDF |
CheckFormAvailability | 在原生表單資料可用之前阻擋表單填寫初始化 |
LoadAvailablePage | 在表單可用性達到終端狀態後,閘控並載入一個以一為基底的頁面 |
CancelProgressiveLoad | 依相依順序關閉頁面、表單、文件、可用性控制代碼、回呼與串流配接器 |
| Member | Type | Description |
|---|---|---|
ProgressiveLoading | Boolean | 原生可用性工作階段存續期間為 True |
LogicalFileSize | UInt64 | 由伺服器或容器提供的最終內容長度 |
AvailableByteCount | UInt64 | 串流中已可讀取之連續前綴的單調遞增長度 |
Linearization | TPdfLinearization | 在足夠的標頭位元組可用後的原生線性化判定 |
FirstAvailablePageNumber | Integer | 文件控制代碼開啟後的第一個頁面(以一為基底) |
OnDataAvailable | TPdfDataAvailableEvent | 針對稀疏或亂序範圍存放區覆寫前綴測試 |
RangeRequests | TPdfRangeRequestScheduler | 擁有的排程器,從每個原生文件、表單與頁面下載提示填入 |
TPdfProgressiveDocument 擁有原生 FPDF_AVAIL 控制代碼與回呼記錄,PDFium 在遠端或成長中串流的載入期間可能會重新查訪這些記錄
先提供伺服器內容長度與任何初始前綴,呼叫相關的可用性方法,從 RangeRequests 出列工作,將每個回應寫入背後的隨機存取存放區,呼叫 CompleteRequest,並重複直到傳回終端可用性狀態
對於連續下載,在寫入新位元組後推進 AvailableByteCount;對於稀疏範圍快取,指派 OnDataAvailable 並回答每個請求的位移與大小是否可讀
排程器接受與舊式 DownloadHints 輸出相同的多載原生提示,移除已透過前綴或稀疏回呼得知的範圍,為頁面關鍵位元組搶佔重疊的背景傳輸而不提升相鄰尾段,並以 MaxRequestSize 切分傳輸工作
線性化 PDF 可以在整個檔案送達之前開啟文件中繼資料與第一頁;非線性化 PDF 需要完整檔案,並自動使用一般的原生自訂串流載入器
var
Hints: TPdfDownloadRanges;
Request: TPdfRangeRequest;
State: TPdfDataAvailability;
begin
Progressive.BeginProgressiveLoad(CacheStream, ContentLength,
False, InitialPrefixLength);
repeat
State := Progressive.CheckDocumentAvailability(Hints);
while Progressive.RangeRequests.TryDequeue(Request) do
begin
FetchRangeIntoCache(Request.Offset, Request.Size);
Progressive.RangeRequests.CompleteRequest(Request);
end;
until State <> pdaNotAvailable;
if State = pdaAvailable then
Progressive.OpenProgressiveDocument;
end;
FPDF_FILEACCESS ABI 將邏輯檔案大小限制為 4 GiB,類別遇到更大的大小時會引發例外而非截斷AvailableByteCount 不能減少,因為原生剖析狀態假設已下載的位元組保持可用BeginProgressiveLoad 之前設定 EnableV8EngineCancelProgressiveLoad 或解構完成之前,保持串流與每個稀疏範圍可讀CompleteRequest;完成後該範圍會立即對 PDFium 可見TStream.Position 變得安全;請使用定位 I/O 或外部串流鎖定RangeRequests.OnCancelRequest,在工作階段被取消、更高優先順序提示與其重疊,或外部稀疏涵蓋使其變得多餘時,中止進行中的傳輸操作TPdfDataAvailability,
TPdfDownloadRange,
TPdfDownloadRanges,
TPdfRangeRequest,
TPdfRangeRequestPriority,
TPdfRangeRequestStatistics,
TPdfRangeRequestScheduler,
TPdfDataAvailableEvent,
TPdfLinearization,
TPdfFormAvailability