Optional Document Handlers
THPDFDocumentHandlerRegistry chọn các handler thay thế được theo nội dung đã kiểm tra trước khi dùng các gợi ý phần mở rộng yếu hoặc MIME, sau đó chuyển nguồn đã chọn thành một cache PDF bất biến dùng chung cho xuất và dựng
Built-in optional handlers
- XPS và OpenXPS giữ kích thước fixed-page và thứ tự hiển thị, chuyển hình học viết tắt tự đóng hoặc mang property
Paththành vector PDF native, giữ các cọ đặc dạng thuộc tính và property, các pattern shadingLinearGradientBrushnhiều chặng vàRadialGradientBrushelliptical, và fill các đường dẫn qua các tài nguyênImageBrushpackage JPEG, PNG, TIFF hoặc JPEG XR vớiTileMode=None - Các nét ảnh XPS hỗ trợ ánh xạ
RelativeToBoundingBoxvàViewboxtuyệt đối hoặcViewport, các chế độ látNone,Tile,FlipX,FlipYvàFlipXY, clip đường dẫn và vị trí native, các thuộc tínhTransformsáu tham số hữu hạn hoặc các phần tửImageBrush.TransformMatrixTransform, độ mờ cọ và đường dẫn, alpha soft-mask PNG, DPI ảnh và caching tài nguyên package - XPS
Path.OpacityMaskhỗ trợ mặt nạ đặc, gradient tuyến tính nhiều chặng hoặc radial elliptical, và mặt nạ PNGImageBrush, gồm cả các ô ảnh lặp và phản chiếu; alpha đồng nhất được gộp vào các trạng thái đồ họa hiện có trong khi alpha biến thiên dùng các nhóm transparency DeviceGray native có giới hạn chia sẻ các pattern shading và stream soft-mask ảnh - Canvas XPS
OpacityvàCanvas.OpacityMaskhợp thành các hậu duệ chồng lấn một lần qua các Form XObject DeviceRGB isolated thay vì giảm từng con một cách độc lập; alpha mặt nạ đồng nhất được gộp vào trạng thái nhóm, alpha gradient biến thiên hoặc ảnh PNG tái dùng các tài nguyên soft-mask native, và các nhóm lồng nhau giữ clip đã transform, quyền sở hữu tài nguyên và các annotation link có giới hạn trong phạm vi 4,096 nhóm và 16 MiB nội dung bị bắt mỗi nhóm - XPS
VisualBrushđệ quy chuyển các visualCanvas,PathvàGlyphsinline hoặc hậu thuẫn tài nguyên, phân giải các phạm viResourceDictionarylồng nhau và từ xa, ánh xạ mộtViewboxtuyệt đối sang mộtViewporttuyệt đối hoặc tương đối, và tái dùng một Form XObject PDF có giới hạn xuyên các vị trí đặt trực tiếp, xếp lát và phản chiếu - XPS
Canvas.Clipnhận hình học viết tắt có giới hạn, các giá trịStaticResourcePathGeometrycục bộ hoặc từ xa, và các phần tử property trực tiếp với các hình dòng, Bézier, bậc hai hoặc cung có cấu trúc, transform hình học, hình học rỗng, và các quy tắc fillEvenOddhoặcNonZero; các clip lồng nhau trở thành các đườngW*hoặcWPDF native, các hình chữ nhật điều hướng được giao với bounds clip đã transform đang hoạt động, việc phân tích bị chặn ở 100,000 giá trị số, và các clip dị dạng hoặc suy biến fail closed trước khi các visual con được vẽ - XPS
Glyphsnhận tối đa 65,536 ánh xạIndicesnghiêm ngặt, giữ tiến trình cụm một-nhiều và nhiều-một, advance phần trăm-em tường minh, offset ngang dọc, tiến trình đảoBidiLevellẻ, fill thuộc tính hoặc phần tử property đặc, độ mờ, trích Unicode, và các chẩn đoán đầu vào dị dạng fail-closed; các run đơn giản dùng các mảng PDFTJnative và các buffer ánh xạ lớn tăng với chi phí tuyến tính khấu hao - Các tài nguyên
FontUripackage hỗ trợ các chương trình TrueType và OpenType, các mảnh thành viên TTC và font làm rối GUID của XPS; glyph ID chính xác, các run suy từ cmap, cụm, advance, offset, gốc RTL, tái dùng tài nguyên font, quyền nhúng, subset tùy chọn và các map tríchToUnicodevẫn là dữ liệu font PDF native không thay thế qua GDI - XPS
FixedPage.NavigateUritrên các visualPathvàGlyphsđã transform trở thành một annotation link PDF native với bounds suy từ hình học hoặc chỉ số; các link HTTP, HTTPS và thư vẫn là URI action, trong khi các trang tương đối package và các mảnhLinkTargetđã giải mã phần trăm trở thành các action GoTo tới hoặc lùi sau khi mọi trang sẵn sàng - Một Canvas
FixedPage.NavigateUritrở thành đích kế thừa của mọi visualPath,Glyphshoặc Canvas lồng nhau cho đến khi một visual con cung cấp URI riêng; các đích có phạm vi được khôi phục sau các override lồng nhau, bám theo hình học và transform của từng visual, bị giới hạn bởi các clip Canvas đang hoạt động, sống sót qua bước bắt nhóm opacity isolated, và tiếp tục bị chặn bên trong các FormVisualBrushtái sử dụng được - Điều hướng bị chặn ở 65,536 link với 8,192 ký tự mỗi URI, được kiểm tra hủy trong khi công bố, bị chặn trong lúc bắt
VisualBrushtái sử dụng, và bị từ chối với ký tự điều khiển, scheme không an toàn, đích thiếu hoặc lệch đường dẫn và mảnh - Các
RelativeTransformkhông chuẩn, tài nguyên ma trận chưa phân giải, độ loang gradient Repeat hoặc Reflect, nội suy không phải sRGB, cọ vẽ alpha biến thiên, chuyển đổi màu, nét ảnh, viewboxVisualBrushtương đối, mô phỏng kiểu, glyph nằm ngang và các thuộc tính nét nâng cao vẫn là các chẩn đoán tường minh - EPUB phân giải
container.xml, manifest và thứ tự spine, rồi dùng trình nhập HTML5 paged-media có giới hạn với tài nguyên package chỉ qua callback - CBZ nhận diện các mục ảnh được hỗ trợ, áp thứ tự tên tệp tự nhiên tất định, và tạo một trang cho mỗi ảnh ở DPI ảnh đã cấu hình
Budgets and failure isolation
Một lượt quét central-directory ZIP đã xác thực áp các giới hạn mục, byte nén, byte giãn nở, theo từng mục, đường dẫn trùng, đường dẫn nguy hiểm và tỉ lệ nén trước khi chuyển đổi
Các mục ZipCrypto PKZIP kiểu cũ có thể xin credential qua ArchivePasswordCallback ; callback nhận tên nguồn, tên mục và số lần thử tính từ 1, còn MaxPasswordAttempts giới hạn số lần thử lại từ 1 đến 16
Credential và các byte mục đã giải mã một phần được giữ trong bộ nhớ và xóa giữa các lần thử, hủy được kiểm tra trước và sau mỗi callback, còn callback thiếu, credential bị từ chối, lần thử cạn kiệt hoặc mã hóa không hỗ trợ đều fail closed
ZipCrypto là bảo vệ bằng mật khẩu kiểu cũ chứ không phải mã hóa có xác thực hiện đại, và quy ước byte mật khẩu không-ASCII có thể khác nhau giữa các nhà sản xuất ZIP
Các mục được bảo vệ bằng mật khẩu cần Delphi 12 trở lên, thứ mà System.Zip của nó cung cấp hook giải mã; khi được build với phiên bản Delphi cũ hơn, các handler vẫn đọc được các mục không mã hóa nhưng từ chối các mục mã hóa như không được hỗ trợ trước khi ArchivePasswordCallback được gọi
Các mục mà kích thước hoặc offset cần đến trường ZIP64 đòi hỏi Delphi 11 trở lên; các phiên bản Delphi cũ hơn từ chối chúng như không được hỗ trợ
Các giới hạn tài nguyên, reflow, trang, pixel, DPI, đầu ra, và hủy bỏ vẫn hoạt động suốt quá trình chuyển đổi và dựng, trong khi xuất bản đầu ra thất bại khôi phục một stream đích có thể tìm kiếm
Registration and use
var
Registry: THPDFDocumentHandlerRegistry;
Options: THPDFDocumentHandlerOptions;
Handled: IHPDFHandledDocument;
Info: THPDFDocumentHandlerInfo;
begin
Registry:= THPDFDocumentHandlerRegistry.Create;
try
Registry.RegisterStandardHandlers;
Options:= THPDFDocumentHandlerOptions.Default;
if Registry.OpenFromFile('book.epub', '', Options, Handled, Info) then
Handled.WritePDF(OutputStream, Options, Info);
finally
Registry.Free;
end;
end;