Scalable and Random-Access PDF Loading
HotPDF giữ cho các tệp lớn đã nạp đáp ứng tốt bằng cách trì hoãn việc sao chép luồng và phân tích object nén cho đến khi dữ liệu được yêu cầu
Các cửa sổ luồng dựa trên tệp
Các tài liệu không mã hóa mở bằng LoadFromFile giữ lại các thân luồng bất biến dưới dạng các dải tệp nguồn
Các lượt đọc di chuyển đến dải yêu cầu và giải phóng handle nguồn ngay lập tức, nhờ vậy tệp gốc vẫn có thể thay thế được trên Windows
OpenLoadedStreamSourceSlice tạo một view chỉ đọc độc lập trên một dải nguồn chưa lọc mà không sao chép hay materialise luồng lười
Lần ghi đầu tiên materialise luồng trong bộ nhớ khi nó bằng hoặc dưới LoadedStreamMemoryThreshold, hoặc trong một tệp tạm do sở hữu khi nó lớn hơn
Object stream lười
Mỗi container /Type /ObjStm đã giải mã được lập chỉ mục theo số object xref có thẩm quyền mà không phân tích mọi thành viên trong lúc mở
Catalog, page-tree và việc giải link sau đó materialise từng thành viên một lần và tái sử dụng object đã phân tích của chúng
Một lần ghi lại đầy đủ tự động materialise mọi thành viên còn lại, trong khi một lần lưu dựa trên tệp không thay đổi có thể bảo toàn các byte gốc trực tiếp
ReleaseDecodedStreamsAfterSave giải phóng một container object-stream chỉ sau khi mọi thành viên đã lập chỉ mục được materialise, và ReleaseLoadedDecodedStreamCaches thể hiện cùng lượt giải phóng an toàn đó theo yêu cầu
Random access tùy chỉnh
Kế thừa từ THPDFRandomAccessSource và triển khai GetSize cộng với ReadAt để nạp từ HTTP range, cơ sở dữ liệu, archive, hoặc lưu trữ ảo; ghi đè IsRangeAvailable khi các dải đã fetch có thể đến độc lập
LoadFromRandomAccessSource thích ứng nguồn với parser có thể seek của HotPDF và có thể tùy chọn sở hữu nguồn trong suốt vòng đời tài liệu
Tính khả dụng linearized tăng dần
GetProgressiveLinearizedLoadInfo chỉ đọc một probe first-object có giới hạn, xác thực /L, /O, /E, /N, và /T, và báo cáo tiền tố trang đầu cộng với các dải đuôi main-xref cần thiết cho việc hiển thị sớm
ReadProgressiveLinearizedFirstPageSection sao chép phần trang đầu khả dụng theo từng khối 64 KiB sau khi cả hai dải yêu cầu đều có mặt, trong khi việc hủy thao tác vẫn hoạt động giữa các lượt đọc
THPDFProgressiveLoadStatus phân biệt một header không khả dụng, một nguồn non-linearized hoặc không hợp lệ, các dải trang đầu bị thiếu, sự sẵn sàng của trang đầu, và sự sẵn sàng của toàn bộ tài liệu
Tối ưu hóa ảnh song song và luồng tỷ lệ cao
OptimizeLoadedStreams có thể chọn frmHighRatio để thử bốn chiến lược zlib tất định ở mức nén tối đa và giữ lại luồng Flate tương thích chuẩn nhỏ nhất
OptimizeLoadedImagesParallel giải mã các luồng ảnh đủ điều kiện vào lưu trữ thích ứng có giới hạn, nén đến giới hạn worker của bên gọi, và commit kết quả nối tiếp theo thứ tự object nguồn chỉ khi việc tiết kiệm byte yêu cầu đạt được
Chẩn đoán
GetLoadedStreamCacheInfobáo cáo số luồng dựa trên nguồn, materialise trong bộ nhớ, và materialise trên đĩaGetLoadedObjectStreamCacheInfobáo cáo các thành viên đã lập chỉ mục và materialise, cache hit và miss, và byte đã giải mã được giữ lạiGetLoadedObjectLifecycleStatisticstách biệt các object clean, dirty, released, và must-write
Xem thêm: LoadFromRandomAccessSource, GetProgressiveLinearizedLoadInfo, ReadProgressiveLinearizedFirstPageSection, OptimizeLoadedImagesParallel, OpenLoadedStreamSourceSlice, SourceBacked, LoadedStreamMemoryThreshold, ReleaseLoadedDecodedStreamCaches, DecompressAllObjectStreams