Migrer depuis mPDF
Ce guide vous aide à migrer de mPDF (mpdf/mpdf) vers TCPDF-Next. mPDF est une bibliothèque HTML vers PDF avec support CSS large et fonctionnalités comme texte CJK, codes-barres et filigranes. TCPDF-Next offre un surensemble des capacités de mPDF avec conformité aux standards modernes et zéro dépendance d'exécution.
Comparaison des fonctionnalités
| Fonctionnalité | mPDF | TCPDF-Next |
|---|---|---|
| Version PHP | 7.4+ | 8.5+ |
| Version PDF | PDF 1.4 / 1.7 | PDF 2.0 |
| Architecture | Centré sur HTML/CSS | PDF natif avec support HTML |
| Dépendances d'exécution | 10+ packages Composer | Zéro |
| Chiffrement | RC4, AES-128, AES-256 | AES-256 uniquement (PDF 2.0) |
| Signatures numériques | Non supporté | PAdES B-B à B-LTA |
| PDF/A | PDF/A-1b, PDF/A-3b (partiel) | PDF/A-4 (ISO 19005-4 complet) |
| PDF balisé | Limité | Accessibilité PDF/UA complète |
| Support CJK | Oui (polices intégrées 50+ MB) | Oui (enregistrez les vôtres, subsetting optimisé) |
| RTL / BiDi | Oui | Oui (conforme UAX #9) |
| Codes-barres | Oui (1D et 2D) | Oui (vectoriel natif, ensemble élargi) |
| Filigranes | Oui | Oui |
| Génération TOC | Oui | Oui |
| Utilisation mémoire | Élevée (DOM complet en mémoire) | Modérée (sortie en streaming) |
Fonctionnalités spécifiques mPDF et équivalents TCPDF-Next
Balises HTML personnalisées
mPDF définit des balises HTML non standard. Celles-ci nécessitent adaptation :
| Balise personnalisée mPDF | Équivalent 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 standard) |
<bookmark content="..."> | $pdf->addBookmark('...') |
<watermarktext content="DRAFT"> | $pdf->setWatermark(Watermark::text('DRAFT')) |
<watermarkimage src="..."> | $pdf->setWatermark(Watermark::image('...')) |
En-têtes et pieds de page HTML
mPDF (avant) :
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 (après) :
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');Modes WriteHTML
mPDF (avant) :
php
$mpdf->WriteHTML($css, \Mpdf\HTMLParserMode::HEADER_CSS);
$mpdf->WriteHTML($body, \Mpdf\HTMLParserMode::HTML_BODY);TCPDF-Next (après) :
php
$renderer = new HtmlRenderer($pdf);
$renderer->addStylesheet($css);
$renderer->writeHtml($body);Filigranes
mPDF (avant) :
php
$mpdf->SetWatermarkText('DRAFT', 0.1);
$mpdf->showWatermarkText = true;TCPDF-Next (après) :
php
$pdf->setWatermark(
Watermark::text('DRAFT')
->setOpacity(0.1)
->setRotation(45)
->setColor(Color::rgb(200, 200, 200))
);Mapping de configuration
| Config mPDF | Équivalent TCPDF-Next |
|---|---|
mode => 'utf-8' | Toujours UTF-8 (pas de config nécessaire) |
format => 'A4' | setPageFormat(PageFormat::A4) |
margin_left/right/top/bottom | setMargins(new Margins(...)) |
default_font | $renderer->setDefaultFont(...) |
tempDir | PdfDocument::create()->setTempDir(...) |
autoScriptToLang | $renderer->setAutoFontDetection(true) |
biDirectional | Toujours activé (UAX #9) |
pdfaAuto | setPdfALevel(PdfALevel::PDF_A_4) |
Méthodes de sortie
mPDF (avant) :
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 (après) :
php
$pdf->save('/path/to/file.pdf');
$bytes = $pdf->toString();
// Réponse web (exemple Laravel)
return response($pdf->toString(), 200, [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="doc.pdf"',
]);Réduction des dépendances
Migrer de mPDF simplifie drastiquement votre arbre de dépendances :
Supprimé (mPDF + transitives) :
mpdf/mpdf+ 10+ packages transitifspsr/log,psr/http-message,setasign/fpdi,mpdf/qrcode
Ajouté :
yeee-fang/tcpdf-next(zéro dépendance d'exécution)
Comparaison des performances
| Métrique | mPDF | TCPDF-Next | Amélioration |
|---|---|---|---|
| PDF simple 1 page | 45.3 ms | 8.2 ms | 5.5x plus rapide |
| Document 100 pages | 3 210 ms | 845 ms | 3.8x plus rapide |
| Mémoire pic (1 page) | 18.4 MB | 4.2 MB | 4.4x moins |
| Mémoire pic (100 pages) | 198.2 MB | 28.6 MB | 6.9x moins |
| Taille fichier sortie (1 page) | 24.3 KB | 12.4 KB | 2.0x plus petit |
Voir Benchmarks de performance pour la méthodologie complète et cas de test.
Lecture complémentaire
- Table de mapping API — Mapping complet de méthodes
- Benchmarks — Comparaison complète des performances avec mPDF
- Référence API — Documentation API complète TCPDF-Next
- FAQ — Questions courantes de migration