Skip to content

Migrasi dari mPDF

Panduan ini membantu Anda melakukan migrasi dari mPDF (mpdf/mpdf) ke TCPDF-Next. mPDF adalah library HTML-ke-PDF dengan dukungan CSS yang luas dan fitur seperti teks CJK, barcode, dan watermark. TCPDF-Next menawarkan superset dari kemampuan mPDF dengan kepatuhan standar modern dan nol dependensi runtime.

Perbandingan Fitur

FiturmPDFTCPDF-Next
Versi PHP7.4+8.5+
Versi PDFPDF 1.4 / 1.7PDF 2.0
ArsitekturBerpusat pada HTML/CSSPDF-native dengan dukungan HTML
Dependensi runtime10+ paket ComposerNol
EnkripsiRC4, AES-128, AES-256AES-256 saja (PDF 2.0)
Tanda tangan digitalTidak didukungPAdES B-B hingga B-LTA
PDF/APDF/A-1b, PDF/A-3b (parsial)PDF/A-4 (ISO 19005-4 penuh)
Tagged PDFTerbatasAksesibilitas PDF/UA penuh
Dukungan CJKYa (bundel font 50+ MB)Ya (daftarkan sendiri, subsetting optimal)
RTL / BiDiYaYa (sesuai UAX #9)
BarcodeYa (1D dan 2D)Ya (vektor native, set diperluas)
WatermarkYaYa
Pembuatan TOCYaYa
Penggunaan memoriTinggi (DOM penuh di memori)Sedang (streaming output)

Fitur Spesifik mPDF dan Padanan TCPDF-Next

Tag HTML Kustom

mPDF mendefinisikan tag HTML non-standar. Tag-tag ini memerlukan adaptasi:

Tag Kustom mPDFPadanan 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 standar)
<bookmark content="...">$pdf->addBookmark('...')
<watermarktext content="DRAFT">$pdf->setWatermark(Watermark::text('DRAFT'))
<watermarkimage src="...">$pdf->setWatermark(Watermark::image('...'))

mPDF (sebelum):

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 (sesudah):

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');

Mode WriteHTML

mPDF (sebelum):

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

TCPDF-Next (sesudah):

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

Watermark

mPDF (sebelum):

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

TCPDF-Next (sesudah):

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

Pemetaan Konfigurasi

Konfigurasi mPDFPadanan TCPDF-Next
mode => 'utf-8'Selalu UTF-8 (tidak perlu konfigurasi)
format => 'A4'setPageFormat(PageFormat::A4)
margin_left/right/top/bottomsetMargins(new Margins(...))
default_font$renderer->setDefaultFont(...)
tempDirPdfDocument::create()->setTempDir(...)
autoScriptToLang$renderer->setAutoFontDetection(true)
biDirectionalSelalu aktif (UAX #9)
pdfaAutosetPdfALevel(PdfALevel::PDF_A_4)

Method Output

mPDF (sebelum):

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 (sesudah):

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

// Respons web (contoh Laravel)
return response($pdf->toString(), 200, [
    'Content-Type' => 'application/pdf',
    'Content-Disposition' => 'attachment; filename="doc.pdf"',
]);

Pengurangan Dependensi

Migrasi dari mPDF menyederhanakan dependency tree Anda secara drastis:

Dihapus (mPDF + transitif):

  • mpdf/mpdf + 10+ paket transitif
  • psr/log, psr/http-message, setasign/fpdi, mpdf/qrcode

Ditambahkan:

  • yeee-fang/tcpdf-next (nol dependensi runtime)

Perbandingan Performa

MetrikmPDFTCPDF-NextPeningkatan
PDF sederhana 1 halaman45,3 ms8,2 ms5,5x lebih cepat
Dokumen 100 halaman3.210 ms845 ms3,8x lebih cepat
Puncak memori (1 halaman)18,4 MB4,2 MB4,4x lebih kecil
Puncak memori (100 halaman)198,2 MB28,6 MB6,9x lebih kecil
Ukuran file output (1 halaman)24,3 KB12,4 KB2,0x lebih kecil

Lihat Benchmark Performa untuk metodologi lengkap dan kasus uji.

Bacaan Lanjutan

Didistribusikan di bawah lisensi LGPL-3.0-or-later.