แบ็กเอนด์การเรนเดอร์หน้าแบบเสียบได้
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