Scalable and Random-Access PDF Loading
HotPDF รักษาไฟล์ที่โหลดขนาดใหญ่ให้ตอบสนองโดยการหน่วงเวลาการคัดลอก stream และการแจงนับอ็อบเจ็กต์ที่ถูกบีบอัดจนกว่าข้อมูลจะถูกต้องการ
หน้าต่าง stream แบบ file-backed
เอกสารที่ไม่ได้เข้ารหัสซึ่งเปิดด้วย LoadFromFile จะเก็บเนื้อหา stream ที่ไม่เปลี่ยนแปลงได้เป็นช่วง source-file
การอ่านจะ seek ไปยังช่วงที่ต้องการและปล่อย source handle ทันที ดังนั้นไฟล์ต้นฉบับยังคงสามารถแทนที่ได้บน Windows
OpenLoadedStreamSourceSlice สร้าง view แบบอ่านอย่างเดียวที่เป็นอิสระเหนือช่วงต้นทางที่ไม่ถูกกรองโดยไม่ต้องคัดลอกหรือ materialise stream แบบ lazy
การเขียนครั้งแรกจะ materialise stream ในหน่วยความจำเมื่อมันอยู่ที่หรือต่ำกว่า LoadedStreamMemoryThreshold หรือใน temporary file ที่เป็นเจ้าของเองเมื่อมันใหญ่กว่า
object stream แบบ lazy
คอนเทนเนอร์ /Type /ObjStm ที่ถอดรหัสแต่ละตัวจะถูกจัดทำดัชมีตามเลขอ็อบเจ็กต์ xref ที่เชื่อถือได้โดยไม่ต้องแจงนับสมาชิกทุกตัวระหว่างการเปิด
Catalog, page-tree และการแก้ไข link ในภายหลังจะ materialise สมาชิกแต่ละตัวครั้งเดียวและนำอ็อบเจ็กต์ที่แจงนับแล้วกลับมาใช้ใหม่
การเขียนใหม่แบบเต็มจะ materialise สมาชิกที่เหลือทั้งหมดโดยอัตโนมัติ ขณะที่การบันทึกแบบ file-backed ที่ไม่เปลี่ยนแปลงสามารถรักษา byte ต้นฉบับได้โดยตรง
ReleaseDecodedStreamsAfterSave ปล่อยคอนเทนเนอร์ object-stream เฉพาะหลังจากสมาชิกที่จัดทำดัชมีทุกตัวถูก materialise แล้ว และ ReleaseLoadedDecodedStreamCaches เปิดเผยการปล่อยที่ปลอดภัยเดียวกันตามคำขอ
random access แบบกำหนดเอง
สืบทอดจาก THPDFRandomAccessSource และ implement GetSize พร้อมกับ ReadAt เพื่อโหลดจาก HTTP range, ฐานข้อมูล, ไฟล์บีบอัด หรือพื้นที่จัดเก็บเสมือน; override IsRangeAvailable เมื่อช่วงที่ดึงมาสามารถมาถึงอย่างเป็นอิสระ
LoadFromRandomAccessSource ปรับ source ให้เข้ากับ parser ที่สามารถ seek ได้ของ HotPDF และสามารถเป็นเจ้าของ source สำหรับอายุการใช้งานของเอกสารได้ตามตัวเลือก
ความพร้อมใช้งานแบบ linearized แบบก้าวหน้า
GetProgressiveLinearizedLoadInfo อ่านเฉพาะ first-object probe ที่มีขอบเขต, ตรวจสอบ /L, /O, /E, /N และ /T และรายงานช่วง first-page prefix พร้อมกับ main-xref tail ที่จำเป็นสำหรับการแสดงผลล่วงหน้า
ReadProgressiveLinearizedFirstPageSection คัดลอกส่วน first-page ที่พร้อมใช้งานในก้อน 64 KiB หลังจากทั้งสองช่วงที่จำเป็นปรากฏ ขณะที่การยกเลิกการทำงานยังคงใช้งานอยู่ระหว่างการอ่าน
THPDFProgressiveLoadStatus แยกแยะส่วนหัวที่ไม่พร้อมใช้งาน, source ที่ไม่ใช่ linearized หรือไม่ถูกต้อง, ช่วง first-page ที่ขาดหายไป, ความพร้อมของ first-page และความพร้อมของเอกสารทั้งหมด
การเพิ่มประสิทธิภาพรูปภาพแบบขนานและ stream ที่มีอัตราส่วนสูง
OptimizeLoadedStreams สามารถเลือก frmHighRatio เพื่อลองกลยุทธ์ zlib แบบ deterministic สี่แบบที่การบีบอัดสูงสุดและเก็บ Flate stream ที่เล็กที่สุดที่เข้ากันได้กับมาตรฐาน
OptimizeLoadedImagesParallel ถอดรหัส image stream ที่มีสิทธิ์เข้าสู่พื้นที่จัดเก็บ adaptive ที่มีขอบเขต, บีบอัดจนถึงขีดจำกัด worker ของผู้เรียก และ commit ผลลัพธ์แบบอนุกรมตามลำดับ source-object เฉพาะเมื่อได้การประหยัด byte ตามที่ร้องขอ
การวินิจฉัย
GetLoadedStreamCacheInfoรายงานจำนวน stream ที่สนับสนุนโดยต้นทาง, materialise ในหน่วยความจำ และ materialise ในดิสก์GetLoadedObjectStreamCacheInfoรายงานสมาชิกที่จัดทำดัชมีและ materialise, cache hit และ miss และ byte ที่ถอดรหัสแล้วที่เก็บไว้GetLoadedObjectLifecycleStatisticsแยกอ็อบเจ็กต์ที่สะอาด, dirty, ปล่อยแล้ว และต้องเขียน
ดูเพิ่มเติม: LoadFromRandomAccessSource, GetProgressiveLinearizedLoadInfo, ReadProgressiveLinearizedFirstPageSection, OptimizeLoadedImagesParallel, OpenLoadedStreamSourceSlice, SourceBacked, LoadedStreamMemoryThreshold, ReleaseLoadedDecodedStreamCaches, DecompressAllObjectStreams