mPDFからの移行
このガイドでは、mPDF(mpdf/mpdf)からTCPDF-Nextへの移行を支援します。mPDFは広範なCSSサポート、CJKテキスト、バーコード、透かしなどの機能を持つHTML-to-PDFライブラリです。TCPDF-Nextは、最新の標準準拠とゼロランタイム依存関係で、mPDFの機能のスーパーセットを提供します。
機能比較
| 機能 | mPDF | TCPDF-Next |
|---|---|---|
| PHPバージョン | 7.4+ | 8.5+ |
| PDFバージョン | PDF 1.4 / 1.7 | PDF 2.0 |
| アーキテクチャ | HTML/CSS中心 | PDFネイティブ + HTMLサポート |
| ランタイム依存関係 | 10以上のComposerパッケージ | ゼロ |
| 暗号化 | RC4、AES-128、AES-256 | AES-256のみ(PDF 2.0) |
| デジタル署名 | サポートなし | PAdES B-BからB-LTA |
| PDF/A | PDF/A-1b、PDF/A-3b(部分的) | PDF/A-4(完全なISO 19005-4) |
| タグ付きPDF | 限定的 | 完全なPDF/UAアクセシビリティ |
| CJKサポート | はい(バンドルされた50+ MBフォント) | はい(独自フォント登録、最適化サブセット化) |
| RTL / BiDi | はい | はい(UAX #9準拠) |
| バーコード | はい(1Dおよび2D) | はい(ネイティブベクター、拡張セット) |
| 透かし | はい | はい |
| 目次生成 | はい | はい |
| メモリ使用量 | 高(全DOMがメモリ上) | 中程度(ストリーミング出力) |
mPDF固有の機能とTCPDF-Nextの対応
カスタムHTMLタグ
mPDFは非標準のHTMLタグを定義しています。これらは適応が必要です:
| mPDFカスタムタグ | 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) |
<bookmark content="..."> | $pdf->addBookmark('...') |
<watermarktext content="DRAFT"> | $pdf->setWatermark(Watermark::text('DRAFT')) |
<watermarkimage src="..."> | $pdf->setWatermark(Watermark::image('...')) |
HTMLヘッダーとフッター
mPDF(変更前):
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(変更後):
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');WriteHTMLモード
mPDF(変更前):
php
$mpdf->WriteHTML($css, \Mpdf\HTMLParserMode::HEADER_CSS);
$mpdf->WriteHTML($body, \Mpdf\HTMLParserMode::HTML_BODY);TCPDF-Next(変更後):
php
$renderer = new HtmlRenderer($pdf);
$renderer->addStylesheet($css);
$renderer->writeHtml($body);透かし
mPDF(変更前):
php
$mpdf->SetWatermarkText('DRAFT', 0.1);
$mpdf->showWatermarkText = true;TCPDF-Next(変更後):
php
$pdf->setWatermark(
Watermark::text('DRAFT')
->setOpacity(0.1)
->setRotation(45)
->setColor(Color::rgb(200, 200, 200))
);設定マッピング
| mPDF設定 | TCPDF-Nextの対応 |
|---|---|
mode => 'utf-8' | 常にUTF-8(設定不要) |
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 | 常に有効(UAX #9) |
pdfaAuto | setPdfALevel(PdfALevel::PDF_A_4) |
出力メソッド
mPDF(変更前):
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(変更後):
php
$pdf->save('/path/to/file.pdf');
$bytes = $pdf->toString();
// Webレスポンス(Laravelの例)
return response($pdf->toString(), 200, [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="doc.pdf"',
]);依存関係の削減
mPDFからの移行により、依存関係ツリーが大幅に簡素化されます:
削除(mPDF + 推移的依存関係):
mpdf/mpdf+ 10以上の推移的パッケージpsr/log、psr/http-message、setasign/fpdi、mpdf/qrcode
追加:
yeee-fang/tcpdf-next(ランタイム依存関係ゼロ)
パフォーマンス比較
| メトリック | mPDF | TCPDF-Next | 改善 |
|---|---|---|---|
| 単純な1ページPDF | 45.3 ms | 8.2 ms | 5.5倍高速 |
| 100ページドキュメント | 3,210 ms | 845 ms | 3.8倍高速 |
| ピークメモリ(1ページ) | 18.4 MB | 4.2 MB | 4.4倍削減 |
| ピークメモリ(100ページ) | 198.2 MB | 28.6 MB | 6.9倍削減 |
| 出力ファイルサイズ(1ページ) | 24.3 KB | 12.4 KB | 2.0倍小型 |
完全な方法論とテストケースについては、パフォーマンスベンチマークをご覧ください。
さらに詳しく
- APIマッピングテーブル -- 包括的なメソッドマッピング
- ベンチマーク -- mPDFとの完全なパフォーマンス比較
- APIリファレンス -- TCPDF-Next完全APIドキュメント
- FAQ -- 一般的な移行の質問