PDFiumPas 文件

RenderPagesParallel 方法

元件: TPdf  ·  單元: PDFium
並行算繪多個頁面要求,每個工作者都擁有隔離的 PDFium 文件與頁面控制代碼

Syntax

function RenderPagesParallel(
  const PageNumbers : array of Integer;
  const Options : TPdfParallelRenderOptions;
  const CancellationToken: IPdfCancellationToken = nil): TPdfParallelRenderReport;

Description

RenderPagesParallel 會將目前文件一次性擷取到 TPdfRandomAccessStore,移除快照加密,並在每個工作者文件關閉之前保持來源不可變

記憶體內擷取會直接共用,不需要第二次位元組陣列複製;溢流到磁碟的擷取會透過單一唯讀檔案對應公開;對應失敗時,則回退到 FPDF_LoadCustomDocument,從同一個執行緒安全存放區進行區塊讀取

每個工作者都會以獨立模組的方式載入作用中 PDFium 二進位檔的私人臨時複本,在其工作者執行緒上初始化該模組,並在載入與關閉指派頁面時重用自己的 FPDF_DOCUMENT

模組、文件、頁面、漸進式算繪與點陣圖狀態絕不跨越工作者邊界,避免對單一 PDFium 模組進行不安全的並行呼叫

PageNumbers 使用公開的以一為基底頁面慣例,傳回的 Results 陣列永遠符合要求順序,即使工作者未按順序完成或個別頁面失敗也一樣

每個成功的結果都擁有由上而下的 32 位元像素緩衝區,Stride = Width * 4,除非 reReverseByteOrder 要求 RGBA,否則使用 BGRA 位元組順序

選項

FieldDefaultMeaning
Dpi96目標解析度,範圍從大於 0 到 2400 DPI
MaxWorkers00 表示最多選用四個工作者,否則為 1 到 64,並受要求數量限制
MaxPixelsPerPage64 MiPixels在配置過大的結果緩衝區之前即拒絕該頁
MaxTotalOutputBytes512 MiB限制保留的成功像素緩衝區總量
Rotationro0對每個要求套用相同旋轉,並在 90 或 270 度時交換輸出尺寸
RenderOptions[]原生 PDFium 算繪旗標,包括註解、灰階、列印、平滑與反轉位元組順序
BackgroundColorclWhite在 PDFium 繪製頁面內容之前的初始像素背景

結果

Remarks

Example

uses FPdfAsync;

var
  Options: TPdfParallelRenderOptions;
  Report: TPdfParallelRenderReport;
  I: Integer;
begin
  Options := TPdfParallelRenderOptions.Default;
  Options.Dpi := 150;
  Options.MaxWorkers := 4;
  Options.RenderOptions := [reAnnotations];

  Report := Pdf1.RenderPagesParallel([1, 3, 5, 7], Options, CancelToken);
  for I := 0 to High(Report.Results) do
    if Report.Results[I].Status = pprsSucceeded then
      ConsumeTopDownPixels(Report.Results[I]);
end;

See Also

RenderPage, RenderPageProgressive, RenderTile