Khi xây dựng Compress PDF — công cụ nén PDF của bộ Craft, đối thủ trực tiếp của iLovePDF — chúng tôi cần trả lời một câu hỏi đơn giản: nén PDF thực sự giảm được bao nhiêu, và cách nào hiệu quả nhất trên file thật?
Thay vì khoe vài con số đẹp, chúng tôi đo trên PDF thật: tài liệu scan nhiều trang, file nhiều ảnh, lẫn PDF chữ thuần — và không giấu các trường hợp gần như không nén thêm được. Đây là tinh thần xuyên suốt loạt benchmark trung thực của chúng tôi.
2 engine được thử nghiệm
| Engine | Cách hoạt động | Giấy phép | Thế mạnh |
|---|---|---|---|
| Ghostscript + qpdf | Hạ độ phân giải ảnh + nén lại JPEG (có mất dữ liệu) → dọn dẹp không mất dữ liệu | AGPL | PDF scan / nhiều ảnh |
| pdfcpu + qpdf | Tối ưu cấu trúc không mất dữ liệu (object stream, dedup) | Apache (tự do) | PDF chữ / đã tối ưu |
Điểm mấu chốt: với PDF, dung lượng nằm ở ảnh. Engine duy nhất thật sự thu nhỏ file đáng kể là engine dám hạ độ phân giải ảnh (Ghostscript). pdfcpu nén "an toàn" nhưng gần như không động đến ảnh.
3 mức nén
| Mức | DPI ảnh | Tương đương | Dùng khi |
|---|---|---|---|
| Nén ít | 200 DPI | chất lượng in | cần giữ chất lượng cao |
| Khuyến nghị | 150 DPI | đọc màn hình tốt | cân bằng (mặc định) |
| Nén mạnh | 72 DPI | xem nhanh | nhỏ nhất có thể |
Phương pháp
Bộ mẫu gồm 8 file PDF: 6 tài liệu scan thật từ 4 đến 100 trang (tải công khai từ vanban.chinhphu.vn để đảm bảo số liệu kiểm chứng được) và 2 file mẫu nội bộ. Mỗi file được nén bằng cả hai engine ở cả ba mức, rồi đo dung lượng trước/sau và thời gian xử lý.
Cấu hình kiểm thử: chạy phía máy chủ bằng trình nhị phân CLI, không GPU, trên VM Linux x86 của ERPFit. Ghostscript dùng tham số -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 với -dColorImageResolution đặt theo mức (200 / 150 / 72 DPI) và -dDownsampleColorImages=true. pdfcpu chạy lệnh optimize mặc định, sau đó cả hai đều qua bước dọn dẹp qpdf --linearize.
Mỗi kết quả luôn được so với bản gốc và giữ lại bản nhỏ hơn. Con số dưới đây là số đo thật, không làm tròn để đẹp. Đối chiếu phương pháp với benchmark tóm tắt văn bản và ngăn xếp mã nguồn mở chúng tôi dùng.
Kết quả — PDF scan / nhiều ảnh
Đây là nơi nén PDF phát huy rõ nhất. Mức "Nén mạnh", engine Ghostscript (benchmark nội bộ ERPFit, 06/2026):
| File (thật) | Trước | Sau | Tiết kiệm |
|---|---|---|---|
| Tài liệu scan · 4 trang | 2,06 MB | 250 KB | −88% |
| Tài liệu scan · 5 trang | 2,85 MB | 408 KB | −86% |
| Tài liệu scan · 10 trang | 2,96 MB | 672 KB | −78% |
| Ảnh mẫu · 4 trang | 364 KB | 48 KB | −87% |
Không phải file nào cũng nén được
Đa số công cụ online giấu điều này. Chúng tôi thì không. Một số PDF đã được tối ưu sẵn — ảnh trong đó vốn đã ở độ phân giải thấp hoặc nén kỹ — nên gần như không giảm thêm:
| File (thật) | Trước | Sau | Tiết kiệm |
|---|---|---|---|
| Tài liệu scan · 100 trang | 4,07 MB | 3,96 MB | −3% |
| Tài liệu scan · 31 trang | 1,28 MB | 1,20 MB | −6% |
Thậm chí ở mức "Nén ít", nén lại một bức ảnh vốn đã nén kỹ có thể làm file to ra. Vì vậy công cụ luôn so sánh kết quả với bản gốc và giữ lại bản nhỏ hơn — bạn không bao giờ nhận về file lớn hơn lúc đầu.
Engine "an toàn" (pdfcpu) thì sao?
pdfcpu không mất dữ liệu và có giấy phép tự do (Apache), nhưng trên cùng file scan nó chỉ giảm 0–1%. Nó phù hợp cho PDF chữ thuần hoặc khi cần tránh giấy phép AGPL — không phải để thu nhỏ file scan.
| Loại file | Ghostscript | pdfcpu |
|---|---|---|
| Tài liệu scan 4 trang | −88% | −1% |
| PDF chữ thuần | −20% | −21% |
Tốc độ
Tất cả đều chạy phía máy chủ bằng các trình nhị phân CLI (không cần GPU). Ghostscript ở mức nén mạnh: ~200–600 ms cho file vài trang; một tài liệu scan 100 trang xử lý trong ~580 ms. pdfcpu nhanh hơn (~30–200 ms) vì làm ít việc hơn.
Ước tính dung lượng trước khi nén
iLovePDF chỉ cho bạn 3 nút bấm và giấu mọi con số. Chúng tôi làm ngược lại: trước khi nén, công cụ chạy thử Ghostscript trên 3 trang đầu rồi suy ra dung lượng cho cả file ở cả 3 mức. Cách lấy mẫu thật này chính xác hơn nhiều so với công thức phỏng đoán — sai số chỉ ~10–20%, và xử lý đúng cả những PDF có ảnh "ẩn" mà công cụ phân tích bỏ sót.
Chọn engine tự động
Chế độ Auto ước tính trước, rồi định tuyến: PDF nhiều ảnh → Ghostscript, PDF chữ/đã tối ưu → pdfcpu, và luôn giữ bản nhỏ hơn. Bạn không cần hiểu kỹ thuật — chỉ cần thả file vào.
Kết luận
- PDF scan / nhiều ảnh: nén −78% đến −88% ở mức mạnh — đây là phần lớn PDF "nặng" thực tế.
- PDF đã tối ưu / chữ thuần: giảm rất ít, và chúng tôi nói thẳng thay vì giả vờ.
- Không bao giờ làm file to hơn — luôn giữ bản nhỏ hơn.
- Minh bạch: hiện DPI thật, mức nén thật, và dung lượng ước tính trước khi bạn bấm.