Câu hỏi thường gặp
Tại sao TCPDF-Next yêu cầu PHP 8.5+?
PHP 8.5 giới thiệu các tính năng ngôn ngữ cơ bản cho kiến trúc thư viện — bao gồm pipe operator, cải thiện suy luận kiểu và ngữ nghĩa readonly nâng cao. Nhắm đến runtime hiện đại cho phép TCPDF-Next nhỏ hơn, nhanh hơn và an toàn hơn theo thiết kế thay vì theo cách giải quyết tạm.
Xem chi tiết tại Tại sao PHP 8.5?.
TCPDF-Next có phải fork của TCPDF không?
Không. TCPDF-Next là bản viết lại hoàn toàn từ đầu. Nó không chia sẻ code với thư viện TCPDF gốc. Phần "TCPDF" trong tên thừa nhận lĩnh vực vấn đề (tạo PDF trong PHP) và ảnh hưởng của dự án cũ đến cộng đồng, nhưng kiến trúc, API và triển khai hoàn toàn mới.
Tôi có thể dùng mà không cần Laravel không?
Có. Package tcpdf-next/core hoàn toàn không phụ thuộc framework. Nó chỉ cần PHP 8.5+ và không có dependency framework. Bạn có thể dùng trong bất kỳ ứng dụng PHP nào — Symfony, Slim, PHP thuần, CLI tool hoặc queue worker.
Package tcpdf-next/laravel tùy chọn thêm tiện ích riêng cho Laravel (service provider, Facade, config publishing) nhưng không bắt buộc.
Sự khác biệt giữa Core và Pro là gì?
| Core | Pro | |
|---|---|---|
| Giấy phép | MIT | Thương mại |
| Tạo PDF | Đầy đủ tính năng | Đầy đủ tính năng |
| Typography nâng cao | Cơ bản | OpenType shaping, BiDi, ligature |
| Chữ ký số | Không bao gồm | PAdES / CAdES / X.509 |
| PDF/A, PDF/X | Không bao gồm | Đầy đủ chế độ tuân thủ |
| Engine barcode | Barcode 1D | 1D + 2D (QR, DataMatrix, PDF417) |
| Hỗ trợ | Cộng đồng (GitHub Issues) | Email ưu tiên + SLA |
Core đã sẵn sàng cho production. Pro mở rộng với tính năng doanh nghiệp và tuân thủ.
Làm sao tạo HTML-to-PDF với CSS3 đầy đủ?
Dùng package Artisan (tcpdf-next/artisan). Nó cung cấp pipeline render chấp nhận HTML + CSS3 input và tạo PDF output chính xác đến từng pixel, được hỗ trợ bởi TCPDF-Next Core bên dưới.
use Yeeefang\TcpdfNext\Artisan\HtmlRenderer;
$renderer = HtmlRenderer::create();
$renderer->loadHtml('<h1>Hello</h1><p style="color: navy;">Styled paragraph.</p>');
$renderer->save('/output/report.pdf');Artisan hỗ trợ Flexbox, Grid, web font, media query và hầu hết đặc tả CSS3.
TCPDF-Next có hỗ trợ CJK (Trung, Nhật, Hàn) không?
Có. TCPDF-Next hỗ trợ hạng nhất cho script CJK và layout văn bản phức tạp:
- CjkFontValidator — xác thực và subset file font CJK, đảm bảo phủ glyph đúng.
- BiDiResolver — xử lý văn bản hai chiều (ví dụ: trộn tiếng Anh và Arabic/Hebrew).
- ArabicShaper — áp dụng quy tắc shaping ngữ cảnh cho Arabic, Farsi và Urdu.
Nhúng bất kỳ font TrueType/OpenType hỗ trợ CJK qua cấu hình font, và render văn bản hoạt động tự động.
$doc->configureFonts(function (FontConfig $config): void {
$config->addFont('/fonts/NotoSansCJK-Regular.ttc', alias: 'NotoSansCJK');
});
$doc->setFont('NotoSansCJK', size: 12);
$doc->cell(text: '你好世界'); // Tiếng Trung
$doc->cell(text: 'こんにちは世界'); // Tiếng Nhật
$doc->cell(text: '안녕하세요 세계'); // Tiếng HànTCPDF-Next đã sẵn sàng cho production chưa?
Có. Thư viện được hỗ trợ bởi pipeline testing và phân tích nghiêm ngặt:
- 908+ test bao phủ unit, integration và visual regression.
- 28,881+ assertion trong test suite.
- PHPStan Level 10 — mức phân tích tĩnh nghiêm ngặt nhất — pass với zero error.
- 100%
declare(strict_types=1)trên mọi file mã nguồn.
Test suite chạy trên mọi pull request và bắt buộc pass trước khi merge.
Làm sao báo cáo lỗ hổng bảo mật?
Không mở GitHub issue công khai. Thay vào đó, dùng GitHub Security Advisories để báo cáo lỗ hổng riêng tư. Maintainer sẽ phân loại báo cáo, phối hợp sửa lỗi và phát hành bản bảo mật.
Xem thêm tại file SECURITY.md trong repository.