Progresif Rendering ve İptal

HotPDF, yüklü bir sayfayı birden çok sınırlı çağrı boyunca render edebilir ve uzun süren belge işlemlerini paylaşılan, çağıranın sahibi olduğu bir cancellation token ile durdurabilir

Progresif sayfa rendering

Linearized ağ kaynakları için THPDFLinearizedPageRedrawScheduler, ilk boyama aralıklarını opsiyonel shared-object bağımlılıklarından ayırır ve yeni varan bir bağımlılık sayfayı değiştirebilir hâle geldiğinde yeniden çizim talep eder

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, milisaniye cinsinden en fazla geçen süreyi, en fazla sayıda en üst düzey sayfa content operatörünü veya her ikisini kabul eder; sıfır, o bütçe için sınırsız demektir

Çağrı, sıfır olmayan bir zaman bütçesi uygulamadan önce en az bir operatörü tamamlar; böylece graphics state her zaman bir operatör sınırında duraklatılır

Bitmap, canlı, çağıran için salt okunur kısmi bitmap'i dışa açar; TakeBitmap ise session prsCompleted veya prsCancelled'a ulaştıktan sonra kopyalamadan mülkiyeti devreder

ObjectsProcessed ve TotalObjects, her sayfa /Contents stream'inden gelen en üst düzey content operatörlerini kaynak sırasında raporlar

Progresif bölge rendering

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;

Dört bölge koordinatı, sol alt köşe orijinli PDF user-space noktalarıdır ve çıktı bitmap'i, istenen DPI'da tam olarak o pencereyi kapsar

Session, cache'lenen display list'i yeniden kullanır, çağrılar boyunca graphics ve metin durumunu korur ve ihtiyatlı sınırları ROI ile kesişmeyen pahalı path, metin, görsel, Form ve shading boyamalarını bastırır

State operatörleri ve metin ilerlemesi hâlâ kaynak sırasında yürütülür; böylece erken bir işareti ayıklamak, sonraki görünür bir işareti taşıyamaz veya yeniden renklendiremez

RegionVisiblePaintObjects ve RegionCulledPaintObjects, display-list seçimini dışa açar; tepe bellek rezervasyonu ise tam sayfa yerine bölge boyutlarını izler

Progresif JPEG taramaları

THotPDF.ProgressiveJPEGScanDecoding true olduğunda, uygun bir progresif DCTDecode görseli, sınırlı her ContinueRender çağrısında bir JPEG scan ilerler; böylece canlı bitmap, son taramadan önce erken kaba bir önizleme gösterebilir

THotPDF.ProgressiveJPEGMaxScans, her görseli 1 ile 4096 scan arasında sınırlar; belge decode-bayt bütçesi ayrıca hizalanmış çıktı bitmap'ini de kapsar

THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded ve THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded, tamamlanan scan ve görsel sayılarını raporlar; THPDFLoadedPageRenderSession.OnProgressiveJPEGScan, her görünür taramadan sonra bir THPDFProgressiveJPEGScanEvent alır ve session'ı iptal edebilir

HPDFJpeg unit'i ayrıca ham THPDFJpegByteArray girdileri için THPDFJpegScanDecoder'ı dışa açar; THPDFJpegScanDecodeStatus sonuçları ve satır düzeyi iptal için opsiyonel bir THPDFJpegCancellationCheck callback'i ile

Artımlı yol; varsayılan opaklıkla, mask'sız, transfer fonksiyonsuz, halftonesuz, overprintsiz ve transparency-group durumundan yoksun, tam hedefli DeviceRGB veya DeviceGray JPEG görsel boyamalarını kabul eder. Diğer tüm boyamalar, rendering semantiğini korumak için tam görsel decoder'ını kullanır

Seçeneği devre dışı bırakmak, codec izolasyonu gerektirmek, bir limiti aşmak veya bozuk girdiyle karşılaşmak da kısmi başarısız decode'i ortaya çıkarmadan tam görsel yolunu seçer

Progress callback'leri

THPDFProgressiveRenderProgressEvent, tamamlanan her operatörden sonra çalışır ve işlenen ve toplam sayıları ile geçen render-yürütme süresini alır

Paylaşılan token'ı iptal etmeden o session'ı prsCancelled içinde bitirmek için callback'in Cancel parametresini true yapın

Bir Form XObject, pattern, görsel decode veya başka bir iç içe işlem, kapsayan en üst düzey operatöre aittir ve kontrol geri dönmeden önce küçük bir zaman bütçesini aşabilir

İşlem geneli iptal

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 thread-safe, tek kullanımlık ve çağıranın mülkiyetindedir; Cancel kalıcı olarak iptal talep eder, IsCancellationRequested durumu dışa açar

ThrowIfCancellationRequested, EHPDFOperationCancelled fırlatır ve işlem adını OperationName içinde korur

THotPDF.OperationCancellationToken; yükleme, senkron render, açık bir token olmadan progresif render, OptimizeLoadedStreams, CreatePreflightReport ve ValidatePDFVT için geçerlidir

SignPDFWithPFX ve SignPDFWithSystemCertificate, doğrudan token kabul eden overload'lar sağlar

Mülkiyet ve kısmi sonuç kuralları

İlgili API'ler