עיבוד פרוגרסיבי וביטול פעולה

HotPDF ‏יכול לעבד עמוד טעון על פני מספר קריאות מוגבלות ויכול לעצור פעולות מסמך ארוכות-טווח באמצעות אסימון ביטול משותף שבבעלות הקורא

עיבוד עמוד פרוגרסיבי

Session := PDF.BeginLoadedPageProgressiveRender(0, 144);
try
  repeat
    Status := Session.ContinueRender(8, 128);
    Preview.Assign(Session.Bitmap);
  until Status in [prsCompleted, prsCancelled];

  if Status = prsCompleted then
    FinalBitmap := Session.TakeBitmap;
finally
  Session.Free;
end;

ContinueRender מקבל זמן ביצוע מרבי במילישניות, מספר מרבי של אופרטורי תוכן עמוד ברמה העליונה, או את שניהם; אפס פירושו ללא הגבלה עבור אותו תקציב

הקריאה משלימה לפחות אופרטור אחד לפני הפעלת תקציב זמן שאינו אפס, כך שמצב הגרפיקה תמיד מושהה בגבול של אופרטור

Bitmap חושף את מפת הסיביות החלקית החיה לקריאה בלבד של הקורא, בעוד TakeBitmap מעביר בעלות ללא העתקה לאחר שהסשן מגיע ל-prsCompleted ‏או prsCancelled

ObjectsProcessed ‏ו-TotalObjects מדווחים על אופרטורי תוכן ברמה העליונה מכל זרם /Contents ‏של עמוד בסדר המקור

עיבוד אזור פרוגרסיבי

Session := PDF.BeginLoadedPageProgressiveRegionRender(
  0, 72, 144, 360, 432, 144);
try
  repeat
    Status := Session.ContinueRender(6, 96);
  until Status in [prsCompleted, prsCancelled];
finally
  Session.Free;
end;

ארבע קואורדינטות האזור הן נקודות במרחב המשתמש של PDF ‏עם ראשית בפינה השמאלית-תחתונה, ומפת הסיביות של הפלט מכסה בדיוק את החלון הזה ב-DPI ‏המבוקש

הסשן עושה שימוש חוזר ברשימת התצוגה המאוחסנת, שומר על מצב גרפיקה וטקסט בין קריאות, ומדכא צביעות יקרות של נתיב, טקסט, תמונה, Form ‏והצללה שגבולותיהן השמרניים אינם חותכים את אזור העניין

אופרטורי מצב וקידום טקסט עדיין מתבצעים בסדר המקור, כך שדילול סימן מוקדם יותר אינו יכול להזיז או לצבוע מחדש סימן נראה מאוחר יותר

RegionVisiblePaintObjects ‏ו-RegionCulledPaintObjects חושפים את בחירת רשימת התצוגה, בעוד שמירת שיא הזיכרון עוקבת אחר ממדי האזור במקום אחרי העמוד המלא

סריקות JPEG ‏פרוגרסיביות

כאשר THotPDF.ProgressiveJPEGScanDecoding ‏הוא true, תמונת DCTDecode ‏פרוגרסיבית מתאימה מתקדמת בסריקת JPEG ‏אחת לכל קריאת ContinueRender ‏מוגבלת, כך שמפת הסיביות החיה יכולה להציג תצוגה מקדימה גסה מוקדמת לפני הסריקה הסופית

THotPDF.ProgressiveJPEGMaxScans מגביל כל תמונה ל-1 עד 4096 סריקות, בעוד תקציב בתי הפענוח של המסמך מכסה גם את מפת הסיביות המיושרת של הפלט

THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded ‏ו-THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded מדווחים על ספירות הסריקות והתמונות שהושלמו; THPDFLoadedPageRenderSession.OnProgressiveJPEGScan מקבל THPDFProgressiveJPEGScanEvent ‏לאחר כל סריקה נראית ויכול לבטל את הסשן

יחידת HPDFJpeg חושפת גם את THPDFJpegScanDecoder עבור קלטי THPDFJpegByteArray ‏גולמיים, עם תוצאות THPDFJpegScanDecodeStatus ‏ו-callback ‏אופציונלי THPDFJpegCancellationCheck ‏לביטול ברמת שורה

הנתיב המצטבר מקבל צביעות תמונת JPEG ‏מלאות-יעד של DeviceRGB ‏או DeviceGray ‏עם אטימות ברירת מחדל וללא מסכות, פונקציות העברה, חצאי-גוון, הדפסת-יתר או מצב קבוצת שקיפות; כל שאר הצביעות משתמשות במפענח התמונה המלאה כדי לשמר את סמנטיקת העיבוד

כיבוי האפשרות, דרישת בידוד codec, חריגה ממגבלה או נתקלות בקלט פגום גם הם בוחרים בנתיב התמונה המלאה מבלי לחשוף פענוח חלקי שנכשל

קריאות חוזרות להתקדמות

THPDFProgressiveRenderProgressEvent רץ לאחר כל אופרטור שהושלם ומקבל ספירות מעובדות וסך הכול בתוספת זמן ביצוע העיבוד שחלף

הגדר את פרמטר ה-Cancel ‏של ה-callback ‏ל-true כדי לסיים את הסשן במצב prsCancelled ‏מבלי לבטל את האסימון המשותף

Form XObject, תבנית, פענוח תמונה או פעולה מקוננת אחרת שייכים לאופרטור ברמה העליונה שמכיל אותם ועשויים לחרוג מתקציב זמן קטן לפני שהשליטה חוזרת

ביטול ברמת פעולה

Token := THPDFCancellationToken.Create;
try
  PDF.OperationCancellationToken := Token;
  Worker.Start;
  // Call Token.Cancel from another thread when the operation should stop
finally
  PDF.OperationCancellationToken := nil;
  Token.Free;
end;

THPDFCancellationToken ‏הוא בטוח לשרשורים, חד-פעמי ובבעלות הקורא; Cancel מבקש ביטול לצמיתות ו-IsCancellationRequested חושף את המצב

ThrowIfCancellationRequested מעלה EHPDFOperationCancelled ‏ושומר את שם הפעולה ב-OperationName

THotPDF.OperationCancellationToken חל על טעינה, עיבוד סינכרוני, עיבוד פרוגרסיבי ללא אסימון מפורש, OptimizeLoadedStreams, CreatePreflightReport ‏ו-ValidatePDFVT

SignPDFWithPFX ‏ו-SignPDFWithSystemCertificate מספקים עומסי-יתר שמקבלים אסימון ישירות

כללי בעלות ותוצאות חלקיות

ממשקי API קשורים