Skip to content

Migration từ mPDF

Hướng dẫn này giúp bạn migration từ mPDF (mpdf/mpdf) sang TCPDF-Next. mPDF là thư viện HTML sang PDF với hỗ trợ CSS rộng và các tính năng như văn bản CJK, barcode và watermark. TCPDF-Next cung cấp tập tính năng bao trùm mPDF với tuân thủ chuẩn hiện đại và không dependency runtime.

So sánh tính năng

Tính năngmPDFTCPDF-Next
Phiên bản PHP7.4+8.5+
Phiên bản PDFPDF 1.4 / 1.7PDF 2.0
Kiến trúcTập trung HTML/CSSPDF-native với hỗ trợ HTML
Dependency runtime10+ package ComposerKhông
Mã hóaRC4, AES-128, AES-256Chỉ AES-256 (PDF 2.0)
Chữ ký sốKhông hỗ trợPAdES B-B đến B-LTA
PDF/APDF/A-1b, PDF/A-3b (một phần)PDF/A-4 (đầy đủ ISO 19005-4)
Tagged PDFHạn chếTrợ năng PDF/UA đầy đủ
Hỗ trợ CJKCó (font đi kèm 50+ MB)Có (đăng ký riêng, subset tối ưu)
RTL / BiDiCó (tuân thủ UAX #9)
BarcodeCó (1D và 2D)Có (vector native, bộ mở rộng)
Watermark
Tạo TOC
Sử dụng bộ nhớCao (toàn bộ DOM trong bộ nhớ)Trung bình (streaming output)

Tính năng riêng mPDF và tương đương TCPDF-Next

Tag HTML tùy chỉnh

mPDF định nghĩa tag HTML không chuẩn. Các tag này cần điều chỉnh:

Tag tùy chỉnh mPDFTương đương TCPDF-Next
<tocpagebreak>$pdf->addTableOfContentsPage()
<tocentry content="..." level="0">$toc->addEntry('...', level: 0)
<barcode code="..." type="C128">$page->addBarcode(BarcodeFactory::code128('...'))
<columnbreak>$renderer->columnBreak()
<pagebreak><div style="page-break-before: always"> (CSS chuẩn)
<bookmark content="...">$pdf->addBookmark('...')
<watermarktext content="DRAFT">$pdf->setWatermark(Watermark::text('DRAFT'))
<watermarkimage src="...">$pdf->setWatermark(Watermark::image('...'))

mPDF (trước):

php
$mpdf->SetHTMLHeader('<div style="text-align: center;">Header</div>');
$mpdf->SetHTMLFooter('<div>Page {PAGENO} of {nbpg}</div>');
$mpdf->SetHTMLHeader('<div>Even header</div>', 'E');

TCPDF-Next (sau):

php
$pdf->setHtmlHeader('<div style="text-align: center;">Header</div>');
$pdf->setHtmlFooter('<div>Page {{pageNumber}} of {{totalPages}}</div>');
$pdf->setHtmlHeader('<div>Even header</div>', pages: 'even');

Chế độ WriteHTML

mPDF (trước):

php
$mpdf->WriteHTML($css, \Mpdf\HTMLParserMode::HEADER_CSS);
$mpdf->WriteHTML($body, \Mpdf\HTMLParserMode::HTML_BODY);

TCPDF-Next (sau):

php
$renderer = new HtmlRenderer($pdf);
$renderer->addStylesheet($css);
$renderer->writeHtml($body);

Watermark

mPDF (trước):

php
$mpdf->SetWatermarkText('DRAFT', 0.1);
$mpdf->showWatermarkText = true;

TCPDF-Next (sau):

php
$pdf->setWatermark(
    Watermark::text('DRAFT')
        ->setOpacity(0.1)
        ->setRotation(45)
        ->setColor(Color::rgb(200, 200, 200))
);

Ánh xạ cấu hình

Cấu hình mPDFTương đương TCPDF-Next
mode => 'utf-8'Luôn UTF-8 (không cần cấu hình)
format => 'A4'setPageFormat(PageFormat::A4)
margin_left/right/top/bottomsetMargins(new Margins(...))
default_font$renderer->setDefaultFont(...)
tempDirPdfDocument::create()->setTempDir(...)
autoScriptToLang$renderer->setAutoFontDetection(true)
biDirectionalLuôn bật (UAX #9)
pdfaAutosetPdfALevel(PdfALevel::PDF_A_4)

Method Output

mPDF (trước):

php
$mpdf->Output('/path/to/file.pdf', \Mpdf\Output\Destination::FILE);
$mpdf->Output('doc.pdf', \Mpdf\Output\Destination::DOWNLOAD);
$mpdf->Output('doc.pdf', \Mpdf\Output\Destination::INLINE);
$content = $mpdf->Output('', \Mpdf\Output\Destination::STRING_RETURN);

TCPDF-Next (sau):

php
$pdf->save('/path/to/file.pdf');
$bytes = $pdf->toString();

// Web response (ví dụ Laravel)
return response($pdf->toString(), 200, [
    'Content-Type' => 'application/pdf',
    'Content-Disposition' => 'attachment; filename="doc.pdf"',
]);

Giảm dependency

Migration từ mPDF giúp đơn giản hóa dependency tree đáng kể:

Loại bỏ (mPDF + transitive):

  • mpdf/mpdf + 10+ package transitive
  • psr/log, psr/http-message, setasign/fpdi, mpdf/qrcode

Thêm:

  • yeee-fang/tcpdf-next (không dependency runtime)

So sánh hiệu năng

Chỉ sốmPDFTCPDF-NextCải thiện
PDF 1 trang đơn giản45.3 ms8.2 msNhanh hơn 5.5x
Document 100 trang3,210 ms845 msNhanh hơn 3.8x
Bộ nhớ đỉnh (1 trang)18.4 MB4.2 MBÍt hơn 4.4x
Bộ nhớ đỉnh (100 trang)198.2 MB28.6 MBÍt hơn 6.9x
Kích thước file output (1 trang)24.3 KB12.4 KBNhỏ hơn 2.0x

Xem Benchmark hiệu năng để biết phương pháp đầy đủ và test case.

Đọc thêm

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