แบ็กเอนด์การเรนเดอร์หน้าแบบเสียบได้

HotPDF route การเรนเดอร์ bitmap หน้าที่โหลดแล้วผ่าน backend ที่แอปนิยามได้ ขณะคง renderer เดิมไว้เป็นค่า default แบบไม่ต้องตั้งค่าและเป็น fallback เสริมได้

แบ็กเอนด์เนทีฟในตัว

PDF.UseNativeGDIRenderBackend;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);

THPDFNativeGDIRenderBackend เปิดเผย renderer GDI เนทีฟของ Windows ที่ใช้มาแล้ว ผ่านสัญญา backend สาธารณะชุดเดียวกับที่ implementation ภายนอกใช้

capability ประกาศ prbcNative, prbcDeterministic, prbcTransparency, prbcColourManagement กับ prbcThreadSafe โดยไม่อ้าง prbcDeviceAcceleration

แบ็กเอนด์ scanline ด้วย SIMD

var
  Backend: IHPDFPageRenderBackend;
begin
  Backend := THPDFSIMDScanlineRenderBackend.Create;
  PDF.PageRenderBackend := Backend;
  Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
end;

THPDFSIMDScanlineRenderBackend preflight display list ที่คอมไพล์แล้วทั้งชุด แล้วเขียนการระบายสี่เหลี่ยมแบบ DeviceRGB หรือ DeviceGray ที่รองรับ ลง surface bitmap 32 บิตสุดท้ายตรง ๆ ผ่าน batch 64 ไบต์กับหางเวกเตอร์ 16 ไบต์

path สี่เหลี่ยมแบบ compound ถูกระบายตาม fill rule แบบ nonzero หรือ even-odd เป็นครั้งเดียวทั้งชุด คงรูกรอบใน ทิศทาง subpath ที่ถูก transform และ content ที่วาดไว้ก่อนหน้า การแรสเตอร์ตรวจการยกเลิกเป็น batch แบบมีขอบเขต และทิ้ง surface ที่ยังวาดไม่เสร็จ

backend รับ save/restore ของ graphics state, scale แบบตั้งฉาก, matrix translation กับการหมุนมุมฉาก, การเปลี่ยนสีระบาย, สี่เหลี่ยม, operator ระบาย และการรีเซ็ต path ส่วนข้อความ, path อิสระ, การลงเส้น, รูป, transparency, clipping, pattern, shading, colour space ที่ไม่รองรับ และ transform ที่ไม่ตั้งฉากจะถูกปฏิเสธก่อนจอง bitmap

capabilities ประกาศ prbcSIMD, prbcThreadSafe และ prbcDeterministic โดยไม่อ้างว่ามี device acceleration, transparency หรือ colour management

THPDFSIMDRenderBackendStatistics รายงาน surface แบบตรง, สี่เหลี่ยมที่เรนเดอร์, block เวกเตอร์, พิกเซลหางแบบ scalar และ operator ที่ถูกปฏิเสธแบบเป๊ะเมื่อจำเป็นต้อง fallback

สัญญาของแบ็กเอนด์แบบกำหนดเอง

implement IHPDFPageRenderBackend แล้วกำหนดให้ THotPDF.PageRenderBackend

THPDFPageRenderBackendRequest ให้ index หน้ากับ DPI ที่ขอ, THPDFPageDisplayList ที่คอมไพล์แล้ว และ resolver THPDFRenderDocAccess สำหรับ stream, รูป, ฟอนต์, optional content, colour management และการยกเลิก

backend ตรวจ operator ที่คอมไพล์แล้วแต่ละตัวผ่าน THPDFPageDisplayList.GetToken ได้ โดยไม่ต้อง parse เนื้อหาหน้าซ้ำ

ส่งคืน True พร้อม TBitmap ที่จัดสรรใหม่เพื่อโอนความเป็นเจ้าของ bitmap ให้ HotPDF ส่วนการส่งคืน False โดยไม่มี bitmap หมายถึงการปฏิเสธคำขอ

การทำงานขนานและ fallback

backend ที่ประกาศ prbcThreadSafe ทำงานพร้อมกันได้ผ่าน pipeline เรนเดอร์หน้าแบบขนานทั้งสองตัว

backend ที่ไม่มีความสามารถนั้นถูกจัดลำดับผ่าน call lock เฉพาะตัว ขณะที่การคอมไพล์ display list ยังทำพร้อมกันได้

rbfpSoftwareFallback ลองคำขอ backend ที่ใช้ไม่ได้, ถูกปฏิเสธหรือล้มด้วย renderer เดิมซ้ำ ขณะที่ rbfpFail raise EHPDFRenderBackend

backend นิยาม IHPDFPageRenderBackendFailureInfo เพิ่มได้หรือคืนเหตุผล diagnostic ต่อคำขอ เพื่อให้การปฏิเสธแบบพร้อมกันยังเก็บเหตุผลของการพยายามเรนเดอร์ครั้งนั้นไว้ได้

การเปลี่ยน backend จะทำให้ entry ของแคชหน้าที่เรนเดอร์แล้วทั้งในหน่วยความจำและแบบคงอยู่เสีย รูปจาก renderer ต่างกันจึงไม่ถูกผสมกันเด็ดขาด

การวินิจฉัยและด่านตรวจทางภาพ

THPDFRenderBackendStatistics รายงานจำนวนพยายาม, สำเร็จ, ล้มเหลว, fallback ฝั่งซอฟต์แวร์, การเรียกที่จัดลำดับ, เวลาที่ใช้, ชื่อ backend และเหตุผลความล้มเหลวล่าสุด

fixture parity ในตัวใช้ transparency ที่ทับกัน แล้วประกาศ Delta E สูงสุด 0, error การ composite RGB เป็น 0 และจำนวนพิกเซลที่ต่างกันเป็น 0 เทียบกับ renderer default บน Win32 กับ Win64

API ที่เกี่ยวข้อง