Skip to content

mPDFからの移行

このガイドでは、mPDF(mpdf/mpdf)からTCPDF-Nextへの移行を支援します。mPDFは広範なCSSサポート、CJKテキスト、バーコード、透かしなどの機能を持つHTML-to-PDFライブラリです。TCPDF-Nextは、最新の標準準拠とゼロランタイム依存関係で、mPDFの機能のスーパーセットを提供します。

機能比較

機能mPDFTCPDF-Next
PHPバージョン7.4+8.5+
PDFバージョンPDF 1.4 / 1.7PDF 2.0
アーキテクチャHTML/CSS中心PDFネイティブ + HTMLサポート
ランタイム依存関係10以上のComposerパッケージゼロ
暗号化RC4、AES-128、AES-256AES-256のみ(PDF 2.0)
デジタル署名サポートなしPAdES B-BからB-LTA
PDF/APDF/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/bottomsetMargins(new Margins(...))
default_font$renderer->setDefaultFont(...)
tempDirPdfDocument::create()->setTempDir(...)
autoScriptToLang$renderer->setAutoFontDetection(true)
biDirectional常に有効(UAX #9)
pdfaAutosetPdfALevel(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/logpsr/http-messagesetasign/fpdimpdf/qrcode

追加:

  • yeee-fang/tcpdf-next(ランタイム依存関係ゼロ)

パフォーマンス比較

メトリックmPDFTCPDF-Next改善
単純な1ページPDF45.3 ms8.2 ms5.5倍高速
100ページドキュメント3,210 ms845 ms3.8倍高速
ピークメモリ(1ページ)18.4 MB4.2 MB4.4倍削減
ピークメモリ(100ページ)198.2 MB28.6 MB6.9倍削減
出力ファイルサイズ(1ページ)24.3 KB12.4 KB2.0倍小型

完全な方法論とテストケースについては、パフォーマンスベンチマークをご覧ください。

さらに詳しく

LGPL-3.0-or-later ライセンスの下で公開されています。