function RenderPagesParallel(
const PageNumbers : array of Integer;
const Options : TPdfParallelRenderOptions;
const CancellationToken: IPdfCancellationToken = nil): TPdfParallelRenderReport;
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
| שדה | ברירת מחדל | משמעות |
|---|---|---|
Dpi | 96 | רזולוציית יעד מ-0 מעלה ועד 2400 DPI |
MaxWorkers | 0 | 0 בוחר עד ארבעה workers, אחרת 1 עד 64 בתחום שמטיל מספר הבקשות |
MaxPixelsPerPage | 64 MiPixels | דוחה עמוד לפני הקצאת חוצץ תוצאה בגודל חריג |
MaxTotalOutputBytes | 512 MiB | תוחם את הסכום של חוצצי הפיקסלים המוצלחים שנשמרו |
Rotation | ro0 | מחיל את אותו סיבוב על כל בקשה ומחליף את ממדי הפלט עבור 90 או 270 מעלות |
RenderOptions | [] | דגלי רינדור native של PDFium, כולל הערות, גווני אפור, הדפסה, החלקה וסדר בייטים הפוך |
BackgroundColor | clWhite | רקע הפיקסלים ההתחלתי לפני ש-PDFium צובע את תוכן העמוד |
pprsSucceeded מחזיר ממדים, stride, פורמט פיקסלים, פיקסלים וזמן שחלףpprsCancelled אינו מחזיר פיקסלים כאשר ביטול נצפה לפני הלולאה ההדרגתית או במהלכהpprsFailed מבודד עמוד לא תקף, כישלון טעינה או רינדור native, או דחייה עקב תקציב משאבים, בתוך ErrorMessageTotalOutputBytes, ואת הזמן שחלף מקצה לקצהSourceSize, SourcePeakMemoryBytes ו-SourceStorageBackend חושפים את עלות הלכידה המתוחמתSourceBackingKind הוא ppsbSharedMemory, ppsbMemoryMappedFile או ppsbRandomAccessStore לאחר לכידת המקורreInvert ו-reNightDuotone הן טרנספורמציות מפת סיביות שלאחר רינדור וה-API הזה של חוצץ גולמי דוחה אותןSaveMemoryLimit ו-SaveTemporaryDirectory שולטים במקור הנלכד, בעוד שתקציב הפלט מכסה חוצצי תוצאות שנשמרו ולא הקצאות פנימיות של PDFiumTPdf במקביל בזמן לכידת ה-snapshot הראשוני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;