Tạo PDF trong Docker với .NET
Một image .NET runtime thông thường là đủ để tạo PDF bằng DocToolkit. Bài này nêu image nên dùng, image nên tránh, và vì sao PDF nhỏ hơn trong image gọn không cài phông chữ nào.
FROM mcr.microsoft.com/dotnet/runtime:8.0Không cần cài thêm gì
- Thư viện không cần tệp nhị phân native nào, nên một image .NET runtime thông thường là đủ.
- Không có gì để
apt-get installvà không cần lớp LibreOffice.
Dùng runtime, không dùng runtime-deps
- Hãy dùng
runtime, không dùngruntime-deps. - Image
runtime-depschứa các thành phần native mà .NET runtime phụ thuộc, nhưng không chứa chính runtime. Nó dành cho bản publish self-contained. - Một ứng dụng framework-dependent chép vào
runtime-depssẽ lỗi khi khởi động, không phải khi build.
Phông chữ trong image gọn
- Image gọn không cài sẵn phông chữ nào, và điều đó làm PDF bạn nhận được khác đi.
- Trên máy phát triển có phông chữ hệ thống, phông được nhúng vào PDF. Cùng một hóa đơn nặng khoảng 167 KB, mang theo Arial-Regular và Arial-Bold.
- Trong container gọn không có phông chữ, PDF quay về các phông chuẩn base-14 (Helvetica). Cùng hóa đơn đó nặng khoảng 1,5 KB, không nhúng gì.
- Cả hai đều là PDF hợp lệ và đều hiển thị được. Arial và Helvetica có cùng số đo ký tự nên ngắt dòng không đổi, nhưng hình dạng chữ không giống hệt nhau.
Đã kiểm tra khi không có mạng
- Mẫu Container được build và chạy trong CI với
--network none. - Nhờ vậy việc chạy không cần mạng được chứng minh thật, không chỉ là một câu trong README.
Những điều nó không làm
- PDF tạo trong container của bạn sẽ không bao giờ giống từng byte với PDF tạo trên laptop. Đừng kiểm tra kích thước hay mã băm của PDF giữa các môi trường.
- Nếu cần một kiểu chữ cụ thể, hãy cài nó vào image.
- Chữ không phải Latin phụ thuộc vào phông chữ của máy chủ, trừ khi bạn cung cấp.
PdfFontOptionsdùng được cho DOCX, HTML, XLSX và PPTX sang PDF; Markdown sang PDF không nhận nó.
Cài đặt
dotnet add package Ank.DocToolkitĐọc trong tài liệu DocToolkitNuGetGitHub