Bài viết kỹ thuật

Thư viện PDF losLab cho Delphi: HotPDF, PDFium Component, và PDFlibPas - So sánh

Ba thư viện. Ba công việc riêng biệt. Chọn sai cái tốn cho bạn vài tuần làm workaround, và chọn cả ba khi bạn chỉ cần một cái tốn overhead bảo trì bạn không lên kế hoạch. Đây là trình bày trực tiếp về những gì mỗi thư viện PDF losLab thực sự làm, nó phù hợp ở đâu, và nơi nó bàn giao cho anh em của nó

HotPDF: viết PDF từ đầu trong Delphi

HotPDF là component VCL gốc để tạo tài liệu PDF. Mô hình của nó là mệnh lệnh và lấy trang làm trung tâm: bạn xây dựng một instance THotPDF, đặt thuộc tính tài liệu, gọi BeginDoc, vẽ lên CurrentPage, thêm trang khi cần, và đóng bằng EndDoc. Thứ tự quan trọng vì BeginDoc commit encryption dictionary và cài đặt nén tại thời điểm nó chạy; bất cứ thứ gì được gán sau điểm đó sẽ bị bỏ qua âm thầm thay vì được áp dụng retroactively

Bề mặt vẽ bao phủ toàn bộ bộ toán tử PDF ở mức Delphi: TextOut cho text Unicode có vị trí, SetFont với nhúng TrueType, các nguyên thủy vector (đường thẳng, đường cong Bezier, hình ellipse, hình chữ nhật), đặt hình ảnh từ file hoặc bộ nhớ, và tạo mã vạch. Tọa độ tính theo điểm từ góc dưới bên trái với Y tăng dần lên trên, điều này bắt mọi người một lần. Trạng thái font không tồn tại qua AddPage, vì vậy một lần gọi SetFont là cần thiết sau mỗi lần ngắt trang

Trường AcroForm là công dân hạng nhất. Bạn có thể thêm trường văn bản, hộp kiểm, nút radio, hộp combo, hộp danh sách và nút nhấn trực tiếp vào đối tượng trang với một lời gọi mỗi cái. HotPDF cũng có thể tải PDF hiện có qua LoadFromFile và điền hoặc đọc giá trị trường, làm cho nó hữu ích trong hai quy trình làm việc riêng biệt: xây dựng form và tự động hóa điền form

Mã hóa cũng được xử lý ở cấp tài liệu. CryptKeyLength chọn scheme (RC4 40-bit đến AES-256), ActivateProtection kích hoạt nó, và ProtectOptions đặt các cờ quyền ISO. Hai chế độ revision AES-256 (R5 và R6, được kiểm soát bởi UseAES256R6) tồn tại vì revision 6 sửa một điểm yếu đã biết trong revision 5 nhưng yêu cầu trình xem có khả năng PDF 2.0; chọn giữa chúng là quyết định tương thích, không phải tiện lợi

Hỗ trợ chữ ký số trong HotPDF bao phủ các profile cơ sở PAdES, vì vậy nó phù hợp cho các quy trình làm việc mà chữ ký phải đáp ứng yêu cầu ETSI EN 319 142. Nếu nhu cầu của bạn chỉ là tạo đầu ra, HotPDF là thư viện cần dùng đầu tiên

PDFium Component: render, xem, và đọc PDF hiện có

PDFium Component bọc engine PDFium của Google như một component VCL, điều này cho nó vai trò về cơ bản khác với HotPDF. Trong khi HotPDF viết, PDFium Component đọc và render. Đối tượng cốt lõi là TPdf, một trình quản lý tài liệu mở file bằng cách đặt FileName rồi Active := True. Lỗi load không được raise như exception; Active đơn giản ở lại False, vì vậy kiểm tra nó sau khi gán không phải tùy chọn

Rendering chạy qua TPdfView, một component trực quan bạn thả vào form và liên kết với instance TPdf qua PdfView.Pdf := Pdf. Zoom và fit mode nằm trên view, không phải trên tài liệu. Một điểm tinh tế hay làm vấp người ta: Pdf.PageNumberPdfView.PageNumber là các thuộc tính độc lập. Đặt cái này không cập nhật cái kia, và các API trích xuất dựa trên view (word box, đơn vị đọc) sử dụng trang hiện tại của view, không phải của tài liệu

Trích xuất văn bản là nơi PDFium Component không có đối thủ cạnh tranh trực tiếp trong dòng sản phẩm losLab. ReadablePageContent trả về văn bản có cấu trúc với nhận thức thứ tự đọc, PageWordBoxes cho các hình chữ nhật bao quanh ở cấp từ, và DocumentReadingUnits duyệt toàn bộ tài liệu. Đối với công việc khả năng tiếp cận, IsTagged cho bạn biết liệu cây cấu trúc có mặt không và ValidatePdfUa chạy kiểm tra tuân thủ UA. Các API này làm cho PDFium Component là lựa chọn tự nhiên cho bất kỳ quy trình làm việc nào cần hiểu nội dung bên trong PDF hiện có thay vì tạo ra cái mới

Điền form cũng hoạt động ở phía PDFium, qua cùng lớp AcroForm mà engine cơ bản hiển thị. Nó phù hợp khi tài liệu nguồn đã tồn tại và bạn đang tự động hóa việc hoàn thành nó thay vì tự xây dựng các trường form

PDFlibPas: thao tác, ký số tuân thủ, và truy cập file trực tiếp

PDFlibPas (phiên bản 3.73.0) nằm ở đầu kia của phổ độ phức tạp. Nó hiển thị ba lớp API trên cùng một mô hình tài liệu: một facade dựa trên handle phẳng (TPDFlib) tương thích với quy ước gọi Quick-PDF, một lớp cây đối tượng đầy đủ (TPDFDocument), và một parser streaming (TSmartPDFReader / TSmartPDFWriter) hoạt động trực tiếp trên các byte file mà không cần tải toàn bộ đồ thị đối tượng

Lớp streaming là điều làm cho PDFlibPas là lựa chọn đúng cho các tài liệu lớn. TSmartPDFWriter có thể thêm một bản cập nhật tăng dần vào file trên đĩa mà không cần tái tạo toàn bộ bảng cross-reference, đây là cơ chế làm nền tảng cho cả resaving hiệu quả và các stamp xác thực dài hạn PAdES. Đối với các quy trình ký số tuân thủ nơi hash được ký phải bao phủ một byte range cụ thể và chữ ký được áp dụng mà không cần viết lại tài liệu, lớp này là con đường khả thi duy nhất

Thao tác tài liệu ở cấp TPDFDocument bao gồm gộp với Merge, sao chép trang chọn lọc qua CopyPagesFromDoc với chuỗi range, và quản trị phiên bản qua SetMinimumVersionLockSaveVersion. Khóa phiên bản raise lỗi 602 nếu bạn cố lưu một tính năng sẽ đẩy đầu ra vượt quá phiên bản đã khóa, điều này hữu ích khi bạn cần đảm bảo đầu ra ở trong một revision PDF cụ thể để tuân thủ lưu trữ

Hỗ trợ PDF/A (ISO 19005) nằm trong workbench tuân thủ của PDFlibPas. Lưu ý rằng mã hóa và PDF/A là loại trừ lẫn nhau theo đặc tả: bạn không thể có cả hai trong một file. Các quy trình làm việc cần bản phân phối được mã hóa và bản lưu trữ PDF/A phải tạo ra hai artifact riêng biệt

Chọn giữa chúng

Cây quyết định điển hình ngắn gọn. Nếu bạn đang tạo tài liệu mới từ dữ liệu, hãy dùng HotPDF. Nếu bạn đang render hoặc trích xuất văn bản từ tài liệu hiện có trong ứng dụng Delphi VCL, hãy dùng PDFium Component. Nếu bạn đang thao tác, gộp hoặc ký số tuân thủ các PDF hiện có ở quy mô lớn hoặc với ngữ nghĩa incremental-save, hãy dùng PDFlibPas. Nhiều hệ thống production sử dụng hai trong ba: HotPDF để tạo đầu ra và PDFlibPas để áp dụng stamp xác thực dài hạn trước khi lưu trữ, chẳng hạn, hoặc PDFium Component để xem trước những gì HotPDF tạo ra trước khi gửi xuống

Cả ba đều đi kèm mã nguồn Pascal gốc cho Delphi và C++Builder, không có phụ thuộc runtime nào ngoài VCL. PDFium Component ngoài ra đóng gói PDFium DLL, bao phủ công việc render và parsing của engine. Trang sản phẩm của mỗi thư viện có tài liệu tham chiếu API đầy đủ và lịch sử phiên bản hiện tại

Chi tiết về các thư viện riêng lẻ: HotPDF Component, PDFium Component, và PDFlibPas