Hỗ trợ bộ lọc PDF

Tổng quan

Luồng PDF và ảnh nhúng xác định cách mã hóa của chúng thông qua tên bộ lọc. HotPDF chủ yếu làm việc với các họ bộ lọc sau khi tạo tài liệu hoặc giải mã nội dung bên ngoài

Các bộ lọc thường dùng

  • FlateDecode: Bộ lọc nén chính cho các stream được tạo ra và đường giải nén chính dựa trên zlib
  • LZWDecode: Được hỗ trợ cho các tình huống di sản và tương thích thông qua HPDFLZW.pas
  • DCTDecode: Dùng cho dữ liệu ảnh JPEG tiêu chuẩn được xử lý bởi các đường nạp ảnh của HotPDF
  • CCITTFaxDecode: Thường gặp trong dữ liệu ảnh TIFF đơn sắc và kiểu fax
  • ASCIIHexDecode / ASCII85Decode / RunLengthDecode: Các helper encoder được phơi trong HPDFTypes.pas (_ASCIIHexEncode, _ASCII85Encode, _RunLengthEncode) từ HotPDF v2.4.0. Hữu ích khi gói nội dung nhị phân tùy ý cho các kênh 7-bit hoặc khi cần hỗ trợ round-trip rõ ràng cho PDF 1.7 7.4
  • JBIG2Decode / JPXDecode: Tên bộ lọc được định nghĩa bởi PDF 1.7 7.4.7 / 7.4.9. Các helper JBIG2 và JPEG 2000 đi kèm của HotPDF chỉ là stub và sẽ báo không được hỗ trợ (trả về False) cho đến khi có backend OpenJPEG / JBIG2 thật được liên kết. Các bản dựng trước đây trả về thành công giả 100×100 khiến ảnh không đọc được; giờ đã được sửa

Ghi chú thực hành

  • Không phải bộ lọc nào cũng được phơi qua một API chung duy nhất; một số bộ lọc chỉ truy cập được qua các unit trợ giúp ảnh hoặc luồng chuyên dụng
  • Với nội dung PDF được tạo ra, THotPDF.Compression vẫn là thiết lập trung tâm mà người dùng nhìn thấy
  • Khi nạp dữ liệu bên ngoài, bộ lọc áp dụng phụ thuộc vào định dạng tệp nguồn và lớp trợ giúp đang được dùng
  • PDF được mã hóa ghép các bộ lọc này với security handler; xem CryptKeyLength cho các tùy chọn AES‑128 (V=4 R=4 / CFM=AESV2) và RC4 (V=1/V=2) được hỗ trợ
  • Các trường biểu mẫu tương tác được phát ra thành annotation Widget mà trình xem sẽ vẽ; xem AcroForm Support
  • Annotation text-markup (Highlight, Underline, Squiggly, StrikeOut) và các liên kết nhảy trong tài liệu (GoTo, GoToR, Launch) được phơi ra dưới dạng các phương thức mới THPDFPage.Add*Annotation / AddGoToLink / AddGoToRLink / AddLaunchLink từ HotPDF v2.6.0
  • Đầu ra DeviceCMYK có sẵn qua THPDFPage.SetCMYKColor / SetCMYKFillColor / SetCMYKStrokeColor; các không gian màu do ICC quản lý được đăng ký bằng THotPDF.RegisterICCProfile và áp dụng qua SetFillColorSpace / SetStrokeColorSpace + SetFillColor / SetStrokeColor từ HotPDF v2.7.0
  • Đặt THotPDF.UseXRefStream thành true trước khi lưu để phát ra một stream cross-reference /Type /XRef nén bằng FlateDecode duy nhất thay vì chuỗi văn bản xref / trailer / startxref (PDF 1.7 7.5.8); có sẵn từ HotPDF v2.8.0
  • Đặt THotPDF.EnableXMPMetadata thành true để gắn stream XMP /Type /Metadata /Subtype /XML vào Catalog (PDF 1.7 14.3.2); được dựng tự động từ các trường Info dict, hoặc cung cấp một packet tự soạn qua CustomXMP. Có sẵn từ HotPDF v2.9.0
  • Chặn phiên bản PDF theo từng phương thức (từ HotPDF v2.24.0). Mỗi phương thức feature được giới thiệu từ v2.4.0+ đều kiểm tra RequirePDFVersion trước khi phát; với StrictVersionLock=false (mặc định) Version của tài liệu sẽ tự nâng lên mức tối thiểu mà feature yêu cầu, còn với StrictVersionLock=true lời gọi sẽ bị từ chối để tệp đã lưu tuân thủ chặt chẽ đặc tả tham chiếu 1.3 / 1.4 / 1.5 / 1.6 / 1.7 đã chọn
  • Các encoder predictor PNG và TIFF cho dữ liệu ảnh nén FlateDecode (PDF 1.7 7.4.4.4): _PNGPredictorEncode áp dụng heuristic bộ lọc minimum-absolute-difference của libpng (Predictor=15), _TIFFPredictor2Encode áp dụng phép sai phân ngang (Predictor=2). Có sẵn từ HotPDF v2.10.0
  • Điểm vào Tagged PDF (PDF 1.7 14.7-14.8): THotPDF.Lang điền /Lang vào Catalog, EnableTaggedPDF phát /MarkInfo <</Marked true>> và một /StructTreeRoot stub, còn các phương thức mới THPDFPage.BeginMarkedContent / BeginMarkedContentMCID / EndMarkedContent ghi các toán tử content-stream BMC / BDC / EMC. Có sẵn từ HotPDF v2.11.0
  • Gradient axial và radial (PDF 1.7 7.10 / 8.7): THotPDF.RegisterAxialGradient / RegisterRadialGradient dựng đầy đủ stack Function Type 2 / Shading Type 2-3 / Pattern Type 2 và trả về một tên pattern ổn định; THPDFPage.SetFillPattern / SetStrokePattern gắn nó lên trang. Số thành phần của màu đầu / cuối chọn DeviceGray (1) / DeviceRGB (3) / DeviceCMYK (4). Có sẵn từ HotPDF v2.13.0; gradient axial nhiều điểm qua Function Type 3 được phơi qua RegisterMultiStopAxialGradient từ v2.18.0
  • Ảnh inline (PDF 1.7 8.9.7) qua THPDFPage.DrawInlineImage; byte thô sẽ tự được bọc bằng ASCIIHex khi không cung cấp Filter để content stream luôn sạch 7-bit. Có sẵn từ HotPDF v2.18.0
  • OutputIntents (PDF 1.7 14.11) qua THotPDF.AddOutputIntent; mỗi lần gọi sẽ thêm một dict /Type /OutputIntent vào Catalog cùng /DestOutputProfile tùy chọn tham chiếu tới ICC profile đã đăng ký. Có sẵn từ HotPDF v2.18.0
  • Tự động sinh appearance-stream cho AcroForm (PDF 1.7 12.5.5 / 12.7.3.3 / 8.10): đặt THotPDF.AutoFormAppearances thành true trước khi thêm các trường biểu mẫu tương tác và HotPDF sẽ dựng sẵn một Form XObject /Subtype /Form cho mục /AP /N của từng widget (Yes / Off sub-dicts cho nút), điền các tài nguyên mặc định /DR của AcroForm bằng các dict font gián tiếp Helvetica / ZapfDingbats, rồi chuyển /NeedAppearances sang false để bộ render tôn trọng các stream nhúng. Có sẵn từ HotPDF v2.28.0
  • ViewerPreferences /ViewArea và /ViewClip (PDF 1.4 12.2 Table 152) hiện được phơi qua các thuộc tính THotPDF.ViewArea / THotPDF.ViewClip (cùng các thành viên tập vpViewArea / vpViewClip tương ứng). Cả hai đều nhận các giá trị THPDFPageBoundary (MediaBox / CropBox / BleedBox / TrimBox / ArtBox) và hoàn tất độ phủ của HotPDF đối với bốn ViewerPreferences ranh giới trang của PDF 1.4. Có sẵn từ HotPDF v2.29.0
  • Chuyển trang (PDF 1.1 / 1.5 12.4.4): THPDFPage.SetPageTransition ghi một dict /Trans lên trang để các trình đọc PDF trong /PageMode /FullScreen animate việc điều hướng. Các kiểu PDF 1.1 (Split, Blinds, Box, Wipe, Dissolve, Glitter, R) và PDF 1.5 (Fly, Push, Cover, Uncover, Fade) được phơi qua enum THPDFTransitionStyle; các sub-option /Dm, /M và /Di đi kèm cũng được phơi ra. THPDFPage.SetPageDuration ghi độ trễ tự chuyển trang /Dur tính bằng giây. Có sẵn từ HotPDF v2.30.0
  • Transparency group ở cấp trang (PDF 1.4 11.6.6 / 7.5.5): THPDFPage.SetTransparencyGroup gắn một dict /Group (/Type /Group /S /Transparency) để các trình render composite nội dung có alpha một cách dự đoán được. Chọn không gian màu device qua enum THPDFGroupColorSpace (DeviceGray / DeviceRGB / DeviceCMYK hoặc bỏ qua), hoặc gọi THPDFPage.SetTransparencyGroupICC với tên của ICC profile đã đăng ký trước đó qua THotPDF.RegisterICCProfile. Các cờ tùy chọn /I (Isolated) và /K (Knockout) điều khiển compositor; THPDFPage.ClearTransparencyGroup xóa mục đã gắn trước đó. Có sẵn từ HotPDF v2.32.0
  • Cập nhật incremental (PDF 1.7 ISO 32000-1 7.5.6): THotPDF.BeginIncrementalUpdate(SourceFile) nạp một PDF hiện có ở chế độ chỉ thêm; các lời gọi CreateIndirect* tiếp theo sẽ tự đánh dấu object mới là dirty, và THotPDF.MarkDirty(Obj) đánh dấu các object đã nạp sẵn để phát lại. THotPDF.SaveIncrementalUpdate(TargetFile) ghi nguyên văn byte nguồn gốc, chỉ nối thêm các object dirty với số object được giữ nguyên, phát ra một subsection xref mới và kết thúc bằng trailer mang /Prev trỏ về xref trước đó. Kết hợp với pipeline hiện có AddSignedSignatureField + PreparePDFForSigning + InsertSignatureHex để thêm các trường chữ ký sau đó vào một tài liệu đã ký mà không làm mất hiệu lực các chữ ký trước (digest /ByteRange của chúng vẫn hợp lệ vì không có byte gốc nào bị thay đổi). Có sẵn từ HotPDF v2.35.0
  • Chuẩn hóa tên phông TrueType nhúng: HotPDF đọc bảng tên TrueType nhúng và đồng bộ /BaseFont, /FontDescriptor /FontName, /FontFamily và tên phông CID con với tên PostScript của chương trình phông. Điều này tránh các lỗi Adobe Acrobat Font Capture do không khớp giữa từ điển phông PDF và payload TTF nhúng. Có sẵn từ HotPDF v2.35.1
  • Phân mảnh phông TrueType (PDF 1.7 ISO 32000-1 9.6.4 / 9.8.2): đặt THotPDF.EnableFontSubsetting thành true trước BeginDoc và HotPDF sẽ dựng lại payload TrueType nhúng chỉ chứa các glyph thực sự được tài liệu dùng. Các tài liệu Latin điển hình giảm khoảng 90% trọng lượng phông nhúng (Arial 1 MB -> khoảng 70 KB trên một dòng "Hello, world."). Phụ thuộc glyph hợp thành được theo dõi đệ quy, đánh số GID được giữ nguyên (nên các content stream Type0 / Identity-H hiện có vẫn chạy), và /BaseFont mới tự động nhận tiền tố bắt buộc gồm sáu chữ cái kèm dấu "+" ở cuối (ví dụ /BaseFont /AAAAAA+ArialMT). Mặc định tắt; bật tùy chọn này để giữ nhúng toàn bộ phông cho quy trình biên tập. Có sẵn từ HotPDF v2.36.0
  • Kiểu viền chú thích và liên kết Popup (PDF 1.7 12.5.4 / 12.5.6.14): THPDFPage.SetAnnotationBorderStyle(Annot, Width, Style, DashPattern) gắn một từ điển /BS với THPDFAnnotBorderStyle đã chọn (absSolid / absDashed / absBeveled / absInset / absUnderline). THPDFPage.AddPopupAnnotationFor(ParentAnnot, Rect, Open) phát ra chú thích /Popup được nối hai chiều (parent /Popup -> popup, popup /Parent -> parent) để trình xem có thể vẽ đường nối bong bóng thoại. Thuộc tính mới THPDFPage.LastAnnotation cấp dữ liệu cho cả hai trợ giúp mà không làm đổi chữ ký của các thủ tục Add*Annotation hiện có. Có sẵn từ HotPDF v2.34.0
  • Bộ xử lý bảo mật Public-Key (PDF 1.7 7.6.5): THotPDF.EnablePubKeyEncryption(seed, KeyType, EncryptMetadata) + THotPDF.AddPubKeyRecipient(envelope) phát ra từ điển mã hóa /Filter /Adobe.PubSec (/SubFilter /adbe.pkcs7.s4 cho V=1 RC4-40 / /adbe.pkcs7.s5 cho V=2 RC4-128 / V=4 AESV2). Bên gọi cung cấp seed ngẫu nhiên 20 byte và một blob binary envelopedData PKCS#7 cho mỗi recipient (được tạo bên ngoài bằng Windows CryptoAPI, OpenSSL hoặc pycryptodome). HotPDF suy ra khóa mã hóa tệp bằng thuật toán 9 (SHA-1 của seed nối với từng envelope) và tái sử dụng phép suy khóa chuẩn theo từng object cho các luồng AES-128 / RC4. Có sẵn từ HotPDF v2.33.0

Xem thêm