function RenderPagesParallel(
const PageNumbers : array of Integer;
const Options : TPdfParallelRenderOptions;
const CancellationToken: IPdfCancellationToken = nil): TPdfParallelRenderReport;
RenderPagesParallel จับภาพเอกสารปัจจุบันลง TPdfRandomAccessStore เพียงครั้งเดียว ถอดการเข้ารหัสของสแนปชอต และคงแหล่งข้อมูลให้เปลี่ยนแปลงไม่ได้จนกว่าเอกสารของ worker ทุกตัวจะปิด
การจับภาพในหน่วยความจำถูกใช้ร่วมกันโดยตรงโดยไม่คัดลอกอาร์เรย์ไบต์ซ้ำ การจับภาพที่ spill ลงดิสก์ถูกเปิดเผยผ่าน file mapping แบบอ่านอย่างเดียวหนึ่งตัว และถ้า mapping ล้มเหลวจะ fallback ไปอ่านเป็นบล็อกผ่าน FPDF_LoadCustomDocument จาก store เดิมที่ thread-safe
worker ทุกตัวโหลดสำเนาชั่วคราวส่วนตัวของไบนารี PDFium เป็นโมดูลอิสระ ตั้งค่าโมดูลนั้นบนเธรดของตัวเอง และใช้ FPDF_DOCUMENT ของตัวเองซ้ำขณะโหลดและปิดหน้าที่ได้รับมอบหมาย
สถานะของโมดูล เอกสาร หน้า การเรนเดอร์แบบ progressive และบิตแมป ไม่ข้ามขอบเขต worker เลย จึงไม่เกิดการเรียกพร้อมกันที่ไม่ปลอดภัยเข้าโมดูล PDFium ตัวเดียว
PageNumbers ใช้ธรรมเนียมเลขหน้าแบบ 1-based ตามส่วนสาธารณะ และอาร์เรย์ Results ที่คืนกลับมาจะเรียงตรงกับลำดับคำขอเสมอ แม้ worker จะเสร็จผิดลำดับหรือหน้าใดหน้าหนึ่งล้มเหลว
ผลลัพธ์ที่สำเร็จแต่ละชุดเป็นเจ้าของ buffer พิกเซล 32 บิตแบบ top-down ที่ Stride = Width * 4 เรียงไบต์แบบ BGRA เว้นแต่ reReverseByteOrder จะร้องขอ RGBA
| Field | Default | Meaning |
|---|---|---|
Dpi | 96 | ความละเอียดเป้าหมาย ตั้งแต่มากกว่า 0 ถึง 2400 DPI |
MaxWorkers | 0 | 0 เลือก worker ได้ถึงสี่ตัว มิฉะนั้นรับค่า 1 ถึง 64 โดยผูกด้วยจำนวนคำขอ |
MaxPixelsPerPage | 64 MiPixels | ปฏิเสธหน้าก่อนจอง buffer ผลลัพธ์ที่ใหญ่เกิน |
MaxTotalOutputBytes | 512 MiB | จำกัดผลรวมของ buffer พิกเซลที่สำเร็จซึ่งเก็บไว้ |
Rotation | ro0 | ใช้การหมุนเดียวกับทุกคำขอและสลับขนาดเอาต์พุตเมื่อ 90 หรือ 270 องศา |
RenderOptions | [] | แฟล็กการเรนเดอร์ native ของ PDFium รวม annotations, grayscale, printing, smoothing และ reverse byte order |
BackgroundColor | clWhite | สีพื้นหลังพิกเซลเริ่มต้นก่อน PDFium วาดเนื้อหาหน้า |
pprsSucceeded คืนขนาด, stride, pixel format, พิกเซล และเวลาที่ใช้pprsCancelled ไม่คืนพิกเซลเมื่อการยกเลิกถูกตรวจพบก่อนหรือระหว่างลูปการเรนเดอร์แบบ progressivepprsFailed แยกความล้มเหลวจากหน้าที่ไม่ถูกต้อง, การโหลดหรือเรนเดอร์ native ล้มเหลว หรือการถูกปฏิเสธด้วยงบทรัพยากร ไว้ใน ErrorMessageTotalOutputBytes และเวลาที่ใช้ตลอดการทำงานSourceSize, SourcePeakMemoryBytes และ SourceStorageBackend เปิดเผยต้นทุนการจับภาพแบบจำกัดขอบเขตSourceBackingKind เป็น ppsbSharedMemory, ppsbMemoryMappedFile หรือ ppsbRandomAccessStore หลังจับภาพแหล่งข้อมูลreInvert และ reNightDuotone เป็นการแปลงบิตแมปหลังเรนเดอร์ จึงถูกปฏิเสธโดย API บัฟเฟอร์ดิบตัวนี้SaveMemoryLimit และ SaveTemporaryDirectory คุมแหล่งข้อมูลที่ถูกจับภาพ ส่วนงบเอาต์พุตครอบ buffer ผลลัพธ์ที่เก็บไว้ ไม่ใช่การจองภายในของ PDFiumTPdf เดียวกันพร้อมกัน ขณะที่สแนปชอตเริ่มต้นกำลังถูกจับภาพPixels รายชุดหลังใช้งานเสร็จ
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;