よくある質問
なぜ TCPDF-Next は PHP 8.5+ を必要とするのですか?
PHP 8.5 は、ライブラリのアーキテクチャに不可欠な言語機能を導入しています。パイプ演算子のサポート、改善された型推論、強化された readonly セマンティクスなどです。モダンなランタイムをターゲットにすることで、TCPDF-Next はワークアラウンドではなく設計によって、よりコンパクトで、高速で、安全になります。
より詳細な根拠については、なぜ PHP 8.5+ なのか? を参照してください。
TCPDF-Next は TCPDF のフォークですか?
いいえ。 TCPDF-Next は完全なゼロからの書き直しです。オリジナルの TCPDF ライブラリとコードを共有していません。名前の「TCPDF」部分は問題領域(PHP での PDF 生成)とレガシープロジェクトのコミュニティへの影響を認めるものですが、アーキテクチャ、API サーフェス、実装はすべて新規です。
Laravel なしで使用できますか?
はい。 tcpdf-next/core パッケージは完全にフレームワーク非依存です。PHP 8.5+ のみに依存し、フレームワーク依存はゼロです。Symfony、Slim、素の PHP スクリプト、CLI ツール、キューワーカーなど、あらゆる PHP アプリケーションで使用できます。
オプションの tcpdf-next/laravel パッケージは Laravel 固有の便利機能(サービスプロバイダ、Facade、設定公開)を追加しますが、必須ではありません。
Core と Pro の違いは何ですか?
| Core | Pro | |
|---|---|---|
| ライセンス | MIT | 商用 |
| PDF 生成 | フル機能 | フル機能 |
| 高度なタイポグラフィ | 基本 | OpenType シェーピング、BiDi、リガチャ |
| デジタル署名 | 含まれない | PAdES / CAdES / X.509 |
| PDF/A, PDF/X | 含まれない | 完全な準拠モード |
| バーコードエンジン | 1D バーコード | 1D + 2D (QR, DataMatrix, PDF417) |
| サポート | コミュニティ(GitHub Issues) | 優先メール + SLA |
Core は単独で本番対応です。Pro はエンタープライズおよびコンプライアンス機能でそれを拡張します。
完全な CSS3 対応の HTML-to-PDF を生成するにはどうすればよいですか?
Artisan パッケージ(tcpdf-next/artisan)を使用してください。HTML + CSS3 入力を受け取り、ピクセルレベルで正確な PDF 出力を生成するレンダリングパイプラインを提供します。内部では TCPDF-Next Core が動作しています。
use Yeeefang\TcpdfNext\Artisan\HtmlRenderer;
$renderer = HtmlRenderer::create();
$renderer->loadHtml('<h1>Hello</h1><p style="color: navy;">Styled paragraph.</p>');
$renderer->save('/output/report.pdf');Artisan は Flexbox、Grid、Web フォント、メディアクエリ、および CSS3 仕様の大部分をサポートしています。
TCPDF-Next は CJK(中国語、日本語、韓国語)をサポートしていますか?
はい。 TCPDF-Next は CJK スクリプトと複雑なテキストレイアウトをファーストクラスでサポートしています:
- CjkFontValidator — CJK フォントファイルを検証しサブセット化して、正しいグリフカバレッジを保証します。
- BiDiResolver — 双方向テキスト(例:英語とアラビア語/ヘブライ語の混在)を処理します。
- ArabicShaper — アラビア語、ペルシア語、ウルドゥー語の文脈依存シェーピングルールを適用します。
フォント設定を通じて CJK 対応の TrueType/OpenType フォントを埋め込むと、テキストレンダリングは自動的に動作します。
$doc->configureFonts(function (FontConfig $config): void {
$config->addFont('/fonts/NotoSansCJK-Regular.ttc', alias: 'NotoSansCJK');
});
$doc->setFont('NotoSansCJK', size: 12);
$doc->cell(text: '你好世界'); // 中国語
$doc->cell(text: 'こんにちは世界'); // 日本語
$doc->cell(text: '안녕하세요 세계'); // 韓国語TCPDF-Next は本番対応ですか?
はい。ライブラリは厳格なテストと分析パイプラインによって支えられています:
- 908 以上のテストがユニット、統合、ビジュアルリグレッションシナリオをカバーしています。
- テストスイート全体で 28,881 以上のアサーション。
- PHPStan レベル 8 — 最も厳格な静的解析レベル — がエラーゼロで通過しています。
- すべてのソースファイルで 100%
declare(strict_types=1)が適用されています。
テストスイートはすべてのプルリクエストで実行され、マージ前に通過が必須です。
セキュリティ脆弱性を報告するにはどうすればよいですか?
公開の GitHub Issue を開かないでください。 代わりに、GitHub Security Advisories を使用して脆弱性を非公開で報告してください。メンテナーが報告をトリアージし、修正を調整し、セキュリティリリースを公開します。
詳細については、リポジトリの SECURITY.md ファイルを参照してください。