PDFiumPas 文件

TPdfProgressiveDocument 類別

單元: PDFium  ·  基底類別: TPdf
原生 PDFium 漸進下載工作階段,具備稀疏位元組可用性、優先順序化範圍排程、有界重試、取消,以及文件、表單與頁面閘門

Syntax

type TPdfProgressiveDocument = class(TPdf) ... end;

Methods

MethodDescription
Create建立文件元件與其擁有的範圍請求排程器
Destroy在釋放繼承的文件資源之前取消漸進狀態
BeginProgressiveLoad(AStream, AFileSize, AOwnsStream, AInitialAvailableByteCount)建立原生可用性提供者,並將邏輯最終大小與目前已儲存的位元組分開處理
CheckDocumentAvailability傳回 pdaAvailablepdaNotAvailablepdaError,並傳回 PDFium 請求的合併位元組範圍
OpenProgressiveDocument透過 FPDFAvail_GetDocument 開啟線性化 PDF,或透過 FPDF_LoadCustomDocument 開啟已完整接收的非線性化 PDF
CheckFormAvailability在原生表單資料可用之前阻擋表單填寫初始化
LoadAvailablePage在表單可用性達到終端狀態後,閘控並載入一個以一為基底的頁面
CancelProgressiveLoad依相依順序關閉頁面、表單、文件、可用性控制代碼、回呼與串流配接器

屬性與事件

MemberTypeDescription
ProgressiveLoadingBoolean原生可用性工作階段存續期間為 True
LogicalFileSizeUInt64由伺服器或容器提供的最終內容長度
AvailableByteCountUInt64串流中已可讀取之連續前綴的單調遞增長度
LinearizationTPdfLinearization在足夠的標頭位元組可用後的原生線性化判定
FirstAvailablePageNumberInteger文件控制代碼開啟後的第一個頁面(以一為基底)
OnDataAvailableTPdfDataAvailableEvent針對稀疏或亂序範圍存放區覆寫前綴測試
RangeRequestsTPdfRangeRequestScheduler擁有的排程器,從每個原生文件、表單與頁面下載提示填入

Description

TPdfProgressiveDocument 擁有原生 FPDF_AVAIL 控制代碼與回呼記錄,PDFium 在遠端或成長中串流的載入期間可能會重新查訪這些記錄

先提供伺服器內容長度與任何初始前綴,呼叫相關的可用性方法,從 RangeRequests 出列工作,將每個回應寫入背後的隨機存取存放區,呼叫 CompleteRequest,並重複直到傳回終端可用性狀態

對於連續下載,在寫入新位元組後推進 AvailableByteCount;對於稀疏範圍快取,指派 OnDataAvailable 並回答每個請求的位移與大小是否可讀

排程器接受與舊式 DownloadHints 輸出相同的多載原生提示,移除已透過前綴或稀疏回呼得知的範圍,為頁面關鍵位元組搶佔重疊的背景傳輸而不提升相鄰尾段,並以 MaxRequestSize 切分傳輸工作

線性化 PDF 可以在整個檔案送達之前開啟文件中繼資料與第一頁;非線性化 PDF 需要完整檔案,並自動使用一般的原生自訂串流載入器

Example

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;

Remarks

相關類型

TPdfDataAvailability, TPdfDownloadRange, TPdfDownloadRanges, TPdfRangeRequest, TPdfRangeRequestPriority, TPdfRangeRequestStatistics, TPdfRangeRequestScheduler, TPdfDataAvailableEvent, TPdfLinearization, TPdfFormAvailability