Skip to content

Migration từ DomPDF

Hướng dẫn này giúp bạn migration từ DomPDF (dompdf/dompdf) sang TCPDF-Next. Hai thư viện có triết lý thiết kế khác nhau cơ bản — DomPDF là trình render HTML/CSS sang PDF, trong khi TCPDF-Next là thư viện PDF-native với engine render HTML mạnh mẽ.

Cách tiếp cận DomPDF vs TCPDF-Next

DomPDF coi việc tạo PDF là render HTML. Bạn viết HTML và CSS, DomPDF chuyển nó thành PDF. Điều này tiện lợi nhưng giới hạn bạn ở những gì CSS có thể biểu đạt, không có quyền truy cập tính năng PDF native như chữ ký số, mã hóa, hoặc tuân thủ PDF/A.

TCPDF-Next cung cấp hai cách tiếp cận:

Cách tiếp cậnMô tảPhù hợp cho
Core APIXây dựng PDF trực tiếp qua method PHPLayout chính xác, form, đồ họa, chữ ký
Artisan HTML RendererTrình render HTML/CSS dựa trên DOM (HtmlRenderer)Nội dung HTML nhiều, migration từ DomPDF

Cho hầu hết migration từ DomPDF, dùng Artisan HTML Renderer — nó nhận template HTML hiện có với thay đổi tối thiểu.

Ánh xạ API

DomPDFTCPDF-NextGhi chú
new Dompdf($options)PdfDocument::create()->build()Fluent builder
$dompdf->loadHtml($html)$renderer->writeHtml($html)Cùng HTML hoạt động
$dompdf->loadHtmlFile($url)$renderer->writeHtmlFile($path)Mặc định chỉ file cục bộ
$dompdf->setPaper('A4', 'portrait')->setPageFormat(PageFormat::A4)Dùng Enum
$dompdf->render()Tự động khi save() / toString()Không cần bước render rõ ràng
$dompdf->output()$pdf->toString()Trả về binary string
$dompdf->stream('file.pdf')Helper response frameworkXem ví dụ bên dưới
$options->set('defaultFont', ...)$renderer->setDefaultFont(...)
$options->set('isRemoteEnabled', true)ResourcePolicy::allowDomain(...)Allowlist rõ ràng
$options->set('chroot', $dir)ResourcePolicy::allowLocalDirectory(...)Kiểm soát chi tiết hơn

Ví dụ migration cơ bản

DomPDF (trước):

php
use Dompdf\Dompdf;
use Dompdf\Options;

$options = new Options();
$options->set('defaultFont', 'Helvetica');
$options->set('isRemoteEnabled', true);

$dompdf = new Dompdf($options);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
file_put_contents('output.pdf', $dompdf->output());

TCPDF-Next (sau):

php
use YeeeFang\TcpdfNext\Document\PdfDocument;
use YeeeFang\TcpdfNext\Document\PageFormat;
use YeeeFang\TcpdfNext\Html\HtmlRenderer;

$pdf = PdfDocument::create()
    ->setPageFormat(PageFormat::A4)
    ->build();

$renderer = new HtmlRenderer($pdf);
$renderer->setDefaultFont('Helvetica', size: 12);
$renderer->writeHtml($html);

$pdf->save('output.pdf');

So sánh hỗ trợ CSS

Tính năng CSSDomPDFTCPDF-Next
Box model (margin, padding, border)
FloatMột phầnMột phần
FlexboxKhôngKhông
GridKhôngKhông
position: absolute/relativeMột phần
@font-face
page-break-before/after
background-imageMột phần
border-radiusKhông
opacity
CSS variable (--custom)KhôngKhông
Media queryKhôngChỉ @media print
table layoutCó (cải tiến)

TIP

HTML renderer của TCPDF-Next hỗ trợ hầu hết thuộc tính CSS 2.1 và một số thuộc tính CSS 3 chọn lọc. Flexbox và Grid không được hỗ trợ — dùng table cho layout phức tạp. Nếu gặp khác biệt render CSS, kiểm tra tài liệu HTML Renderer.

Khi nào dùng Core vs Artisan

Tình huốngCách tiếp cận khuyến nghị
Migration template HTML hiện cóArtisan HTML Renderer
Layout chính xác pixel (hóa đơn, chứng chỉ)Core API
Cần chữ ký sốCore API (ký hoạt động với cả hai, nhưng Core cho kiểm soát tốt hơn)
Tuân thủ PDF/ACả hai (đều hỗ trợ PDF/A-4)
Barcode / QR codeCore API (render vector native)
Form với trường điền đượcCore API
Report đơn giản từ HTMLArtisan HTML Renderer

So sánh hiệu năng

Chỉ sốDomPDFTCPDF-NextCải thiện
PDF 1 trang đơn giản62.1 ms8.2 msNhanh hơn 7.6x
Report 20 trang891 ms187 msNhanh hơn 4.8x
Bộ nhớ đỉnh (1 trang)22.1 MB4.2 MBÍt hơn 5.3x
Bộ nhớ đỉnh (20 trang)89.7 MB12.4 MBÍt hơn 7.2x
Kích thước file output (1 trang)31.8 KB12.4 KBNhỏ hơn 2.6x

Xem Benchmark hiệu năng để biết phương pháp chi tiết và test case bổ sung.

Tính năng mới sau migration

Các tính năng có trong TCPDF-Next mà DomPDF không hỗ trợ:

  • Chữ ký số — PAdES B-B đến B-LTA với hỗ trợ hardware security module.
  • Mã hóa AES-256 — Bảo vệ document bằng mật khẩu và certificate.
  • PDF/A-4 — Tuân thủ lưu trữ đầy đủ (ISO 19005-4).
  • Tagged PDF / PDF/UA — Trợ năng cho trình đọc màn hình.
  • Barcode native — QR, Data Matrix, Code 128, EAN, và nhiều hơn dạng đồ họa vector.
  • Trường form — Text field, checkbox, dropdown điền được.
  • Cross-reference stream — Kích thước file nhỏ hơn với cấu trúc PDF hiện đại.

Đọc thêm

Phân phối theo giấy phép LGPL-3.0-or-later.