TVE.PureDocs.Pdf
2.0.0
dotnet add package TVE.PureDocs.Pdf --version 2.0.0
NuGet\Install-Package TVE.PureDocs.Pdf -Version 2.0.0
<PackageReference Include="TVE.PureDocs.Pdf" Version="2.0.0" />
<PackageVersion Include="TVE.PureDocs.Pdf" Version="2.0.0" />
<PackageReference Include="TVE.PureDocs.Pdf" />
paket add TVE.PureDocs.Pdf --version 2.0.0
#r "nuget: TVE.PureDocs.Pdf, 2.0.0"
#:package TVE.PureDocs.Pdf@2.0.0
#addin nuget:?package=TVE.PureDocs.Pdf&version=2.0.0
#tool nuget:?package=TVE.PureDocs.Pdf&version=2.0.0
TVE.PureDocs.Pdf - Hướng dẫn sử dụng
Thư viện TVE.PureDocs.Pdf là một giải pháp .NET 9 thuần túy (Zero-dependency) để tạo và xử lý tài liệu PDF tuân thủ tiêu chuẩn ISO 32000-2 (PDF 2.0). Thư viện được thiết kế theo kiến trúc phân lớp, từ các toán tử cấp thấp đến API builder hướng Fluent cấp cao.
📋 Danh sách Chức năng chính
- Hỗ trợ PDF 2.0 & Backward Compatibility:
- Mặc định sử dụng Xref Stream và Object Stream (giảm dung lượng file).
- Hỗ trợ đầy đủ các box: MediaBox, CropBox, BleedBox, TrimBox, ArtBox.
- Đồ họa & Nội dung (Layer 1):
- Vẽ hình khối phức tạp: Paths, Bezier curves, Rectangles.
- Hệ màu đa dạng: DeviceRGB, DeviceCMYK, DeviceGray, và ICC-based ColorSpace.
- Độ trong suốt (Transparency): Blend modes, Alpha constant, Soft Masks (SMask).
- Xử lý Văn bản & Font (Công nghệ lõi):
- Font Subsetting: Chỉ nhúng các ký tự được sử dụng, giúp file cực nhẹ.
- Unicode/Vietnamese: Hỗ trợ đầy đủ tiếng Việt thông qua Composite Fonts (Type0).
- ToUnicode CMap: Đảm bảo khả năng Copy/Paste văn bản chính xác 100%.
- Tài liệu có cấu trúc (Tagged PDF):
- Hỗ trợ chuẩn PDF/UA (Accessibility) giúp người khiếm thị đọc được tài liệu.
- Gán thẻ ngữ nghĩa (Semantic tags): Paragraph, Heading, Table, Figure.
- Bảo mật & Chữ ký số:
- Mã hóa AES-256 (Revision 6) hiện đại nhất.
- Chữ ký số PKCS#7 Detached và chuẩn bị cho PAdES LTV.
- Xử lý Hình ảnh:
- Nhúng ảnh JPEG (passthrough), PNG (hỗ trợ Alpha channel), TIFF.
🚀 Hướng dẫn sử dụng & Ví dụ
1. Tạo tài liệu PDF cơ bản
Dưới đây là ví dụ tạo một trang PDF đơn giản với văn bản chọn font Unicode.
using TVE.PureDocs.Pdf.Core;
using TVE.PureDocs.Pdf.Abstractions.Models;
// 1. Khởi tạo Document
using var doc = PdfDocument.Create();
// 2. Thêm trang mới (mặc định A4)
var page = doc.AddPage(PageSize.A4);
// 3. Lấy Content Writer để vẽ
using (var writer = page.CreateWriter())
{
// Cấu hình Font và Màu sắc
writer.SetFont("Arial", 12);
writer.SetFillColor(PdfColor.Rgb(0, 0, 1)); // Màu xanh
// Ghi văn bản Unicode (Tiếng Việt)
writer.BeginText();
writer.MoveTextPosition(50, 750);
writer.ShowString("Chào mừng bạn đến với TVE.PureDocs.Pdf!");
writer.EndText();
// Vẽ một hình chữ nhật
writer.SetStrokeColor(PdfColor.Rgb(1, 0, 0));
writer.Rectangle(50, 700, 100, 50);
writer.Stroke();
}
// 4. Lưu file
doc.Save("HelloWorld.pdf");
2. Sử dụng Hệ thống Layout (Layer 2 - Fluent API)
Lưu ý: Tính năng này đang được phát triển trong Phase 6.
// Ví dụ về cấu trúc API tương lai
doc.NewPage()
.Header(h => h.Center("BÁO CÁO DOANH THU"))
.Add(new TableBlock(data)
.SetBorder(0.5f)
.SetPadding(5))
.Footer(f => f.Right("Trang {PageNumber}/{TotalPages}"))
.Render();
3. Bảo mật tài liệu (Encryption)
doc.Security
.SetUserPassword("user123")
.SetOwnerPassword("admin123")
.SetPermissions(PdfPermissions.Print | PdfPermissions.Copy);
doc.Save("Encrypted.pdf");
📚 Danh sách Module Architect
| Module | Chức năng | Phụ thuộc |
|---|---|---|
| Abstractions | Các giao diện IGraphicsContext, ITextContext... | Không |
| Core | Mô hình đối tượng PDF, File I/O, Lexer/Parser | Abstractions |
| Graphics | Xử lý màu sắc, đường nét, độ trong suốt | Core |
| Fonts | Font parsing, subsetting, CMap | Core |
| Signatures | Ký số PKCS#7, PAdES | Core, Security |
⚠️ Lưu ý quan trọng
- Tốc độ: Thư viện sử dụng zero-copy buffers, tối ưu cho việc tạo tài liệu lớn hàng ngàn trang.
- Tiêu chuẩn: Luôn tuân thủ ISO 32000-2; các thuộc tính không hợp lệ sẽ bị
ComplianceValidatorchặn lại. - Đơn vị: Sử dụng đơn vị PDF Point (1/72 inch). Các hàm tiện ích trong
PdfUnitsgiúp chuyển đổi từ mm, cm.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- System.Security.Cryptography.Pkcs (>= 9.0.0)
- TVE.PureDocs.Fonts.Core (>= 1.0.0)
-
net9.0
- System.Security.Cryptography.Pkcs (>= 9.0.0)
- TVE.PureDocs.Fonts.Core (>= 1.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
2.0.0 — CÓ THAY ĐỔI PHÁ VỠ TƯƠNG THÍCH (đọc kỹ trước khi nâng cấp). Sửa lỗi nghiêm trọng: SaveIncremental() ở 1.0.0 xóa sạch nội dung trang (file mở được, đủ số trang, nhưng trắng). Bổ sung ký số PAdES trọn gói: tự khớp /ByteRange, /Annots, /AcroForm, ký khóa từ xa và ký hoãn, PAdES-B-T/B-LT/B-LTA. Sửa dẫn xuất khóa AES-256 (Algorithm 2.B) — file do 1.0.0 mã hóa không mở được bằng trình đọc chuẩn. Vá lỗ hổng DoS ở chuỗi /Prev.
Phá vỡ tương thích: PdfDocument.Open() và PdfWriter.WriteTrailer()/WriteCrossReferenceStream() thêm tham số — code đã biên dịch với 1.0.0 sẽ ném MissingMethodException, cần biên dịch lại. PdfDocument.Open() nay NÉM lỗi với đầu vào không phải PDF thay vì trả về tài liệu rỗng. File do 1.0.0 mã hóa AES-256 không mở được bằng 1.1.0 (và ngược lại) vì khóa dẫn xuất ở 1.0.0 sai chuẩn.
Lưu ý về mức độ kiểm chứng: phần ký số đã được đối chứng bằng hai hiện thực độc lập (PdfPig, Bouncy Castle) qua 113 test, nhưng CHƯA được kiểm bằng công cụ của bên nhận — chưa qua pdfsig, Adobe Reader, TSA thật hay CA thật. Nhánh HTTP của Rfc3161TimestampProvider và tích hợp SmartCA/Viettel-CA chưa từng chạy với dịch vụ thật. Hãy tự kiểm chứng trước khi dùng cho hồ sơ có giá trị pháp lý.
Chi tiết: https://github.com/quangtrungsoft/PureDocs.Pdf/releases