PDFium Delphi Component Docs

מתודת RenderPagesParallel

Component: TPdf  ·  Unit: PDFium
מרנדר מספר בקשות עמודים במקביל, כאשר כל worker מחזיק מסמך PDFium מבודד ו-handle של עמוד משלו

Syntax

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

Description

RenderPagesParallel לוכד את המסמך הנוכחי פעם אחת אל TPdfRandomAccessStore, מסיר את הצפנת ה-snapshot, ושומר על המקור כבלתי ניתן לשינוי עד שכל מסמך ה-worker נסגר

לכידה בזיכרון משותפת ישירות בלי העתקה שנייה של מערך הבייטים, לכידה שנשפכה לדיסק נחשפת דרך מיפוי קובץ אחד לקריאה בלבד, וכישלון מיפוי חוזר לקריאות block של FPDF_LoadCustomDocument מאותו מאגר thread-safe

כל worker טוען עותק זמני פרטי של הבינארי הפעיל של PDFium כמודול עצמאי, מאתחל את המודול ב-thread שלו, ומשתמש שוב ב-FPDF_DOCUMENT משלו בזמן טעינה וסגירה של העמודים שהוקצו לו

מצב של מודול, מסמך, עמוד, רינדור הדרגתי ומפת סיביות לעולם אינו חוצה גבולות של worker, מה שמונע קריאות בו-זמניות לא בטוחות למודול PDFium אחד

PageNumbers עוקב אחר ההוסכמה הציבורית של מספור עמודים החל מ-1, והמערך Results שמוחזר תואם תמיד לסדר הבקשה, גם אם ה-workers מסיימים שלא לפי הסדר או שעמוד בודד נכשל

כל תוצאה מוצלחת מחזיקה חוצץ פיקסלים 32-bit מלמעלה למטה עם Stride = Width * 4, בסדר בייטים BGRA אלא אם reReverseByteOrder מבקש RGBA

Options

שדהברירת מחדלמשמעות
Dpi96רזולוציית יעד מ-0 מעלה ועד 2400 DPI
MaxWorkers00 בוחר עד ארבעה workers, אחרת 1 עד 64 בתחום שמטיל מספר הבקשות
MaxPixelsPerPage64 MiPixelsדוחה עמוד לפני הקצאת חוצץ תוצאה בגודל חריג
MaxTotalOutputBytes512 MiBתוחם את הסכום של חוצצי הפיקסלים המוצלחים שנשמרו
Rotationro0מחיל את אותו סיבוב על כל בקשה ומחליף את ממדי הפלט עבור 90 או 270 מעלות
RenderOptions[]דגלי רינדור native של PDFium, כולל הערות, גווני אפור, הדפסה, החלקה וסדר בייטים הפוך
BackgroundColorclWhiteרקע הפיקסלים ההתחלתי לפני ש-PDFium צובע את תוכן העמוד

Results

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