Integrasi NextPDF compat-legacy
Sekilas
Bagian berjudul “Sekilas”Gunakan nextpdf/compat-legacy untuk menghubungkan aplikasi sehingga kode TCPDF 6.x yang sudah ada dapat berjalan di atas mesin NextPDF. Paket ini adalah alat bantu migrasi, bukan shim permanen — hapus setelah Anda mengadopsi application programming interface (API) modern (lihat /integrations/tcpdf-compat/migration/). Ini adalah alternatif yang kompatibel dengan TCPDF, bukan klon drop-in: dari ~120 metode TCPDF yang disurvei, 94 mendelegasikan panggilan secara langsung. Metode lainnya memiliki perbedaan perilaku yang terdokumentasi (lihat /integrations/tcpdf-compat/method-coverage/).
Instalasi
Bagian berjudul “Instalasi”composer require nextpdf/compat-legacy:^3.0Perintah ini menyelesaikan nextpdf/core ^3.0 secara transitif. Untuk persyaratan lengkap dan pemeriksaan verifikasi, lihat /integrations/tcpdf-compat/install/.
Boot dan penemuan otomatis
Bagian berjudul “Boot dan penemuan otomatis”Paket ini tidak memasang nama global saat autoload. Saat paket ini di-require, \TCPDF global tidak dibuat. Anda sendiri yang menentukan cara setiap lokasi pemanggilan me-resolve kelas tersebut:
- Disarankan (impor eksplisit). Perbarui baris
use/requiremenjadiuse NextPDF\Compat\Tcpdf\TCPDF;di setiap berkas. Cara ini jelas dan mudah dicari. - Alias global yang harus diaktifkan secara eksplisit. Panggil
LegacyBootstrap::enableAliases()sekali saat boot untuk mendaftarkan\TCPDFdan keempat kelas bantuannya — hanya jika nama-nama tersebut belum digunakan. Mekanisme, idempotensi, dan aturan konflik dengan TCPDF asli: /integrations/tcpdf-compat/boot-and-discovery/.
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Compat\Tcpdf\LegacyBootstrap;
// One call at application bootstrap, before any \TCPDF use.LegacyBootstrap::enableAliases();Pengikatan container
Bagian berjudul “Pengikatan container”Paket ini tidak menyertakan service provider atau bundle framework. Lapisan integrasi tipis tersebut menjadi tanggung jawab Anda. Ikat factory yang mengembalikan adapter baru untuk setiap dokumen — jangan pernah menggunakan singleton bersama, karena setiap instance memiliki status dokumennya sendiri (lihat /integrations/tcpdf-compat/production-usage/ § Concurrency).
<?php
declare(strict_types=1);
use NextPDF\Compat\Tcpdf\TCPDF;use Psr\Container\ContainerInterface;
// Pseudocode for a PSR-11-style container: bind a factory, not a shared instance.$container->set(TCPDF::class, static function (ContainerInterface $c): TCPDF { return new TCPDF('P', 'mm', 'A4');});
// Each resolution is an independent document context.$pdf = $container->get(TCPDF::class);Di Symfony, daftarkan factory tersebut sebagai layanan non-shared. Di Laravel, gunakan bind (bukan singleton) agar setiap resolusi mendapatkan instance baru. Paket ini sendiri tetap agnostik terhadap framework.
Publikasi konfigurasi
Bagian berjudul “Publikasi konfigurasi”Tidak ada berkas konfigurasi framework yang dapat dipublikasikan. Konfigurasikan adapter melalui konstanta legacy K_* / PDF_* (definisikan di bootstrap Anda sebelum konstruksi pertama) atau melalui objek imutabel modern NextPDF\Compat\Tcpdf\Config\AdaptationConfig. Lihat /integrations/tcpdf-compat/configuration/.
Smoke test service-provider / bundle
Bagian berjudul “Smoke test service-provider / bundle”Setelah integrasi tersambung, verifikasi bahwa integrasi menghasilkan berkas Portable Document Format (PDF) yang valid. Pemeriksaan ini mencerminkan cakupan perilaku yang ditegaskan oleh tests/Unit/Compat/Tcpdf/TcpdfOutputTest.php:
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Compat\Tcpdf\TCPDF;
$pdf = new TCPDF('P', 'mm', 'A4');$pdf->AddPage();$pdf->SetFont('helvetica', '', 12);$pdf->Cell(0, 10, 'Integration smoke test');
$bytes = $pdf->Output('smoke.pdf', 'S');
assert(str_starts_with($bytes, '%PDF'), 'Integration smoke test failed');echo "Integration OK\n";Dalam konteks Hypertext Transfer Protocol (HTTP) atau worker, gunakan Output(..., 'F') atau 'S'. Jangan bergantung pada jalur inline. Untuk panduan operasional lengkap, lihat /integrations/tcpdf-compat/production-usage/.
Titik masuk API publik
Bagian berjudul “Titik masuk API publik”| Titik masuk | Tujuan |
|---|---|
NextPDF\Compat\Tcpdf\TCPDF | Facade yang kompatibel dengan TCPDF. Buat satu untuk setiap dokumen. |
TCPDF::getDocument() | Mengembalikan NextPDF\Core\Document yang dibungkus — jalur keluar menuju API modern. |
TCPDF::setStrictMode(bool) | Sakelar audit migrasi (lihat /integrations/tcpdf-compat/configuration/). |
NextPDF\Compat\Tcpdf\LegacyBootstrap::enableAliases() | Alias kelas global yang harus diaktifkan secara eksplisit. |
NextPDF\Compat\Tcpdf\Config\AdaptationConfig | Objek konfigurasi imutabel modern. |
NextPDF\Compat\Contracts\CompatAdapterInterface | Kontrak compat yang digunakan bersama. |
Cakupan API TCPDF
Bagian berjudul “Cakupan API TCPDF”Matriks cakupan otoritatif yang terverifikasi melalui pengujian berada di berkas repositori docs/TCPDF_COVERAGE.md. Ringkasan untuk pembaca — metode yang dicerminkan, diabaikan secara diam-diam, belum diimplementasikan, dan tidak berlaku — ada di /integrations/tcpdf-compat/method-coverage/. Jangan menyebutnya “pengganti drop-in” atau implementasi “kompatibel (bukan identik per byte)”. Gambarkan sebagai alternatif yang kompatibel dengan TCPDF dengan permukaan yang sudah dikenal dan teruji serta perbedaan perilaku yang terdokumentasi.
Lihat juga
Bagian berjudul “Lihat juga”docs/TCPDF_COVERAGE.md— sumber cakupan otoritatif dalam repositori- /integrations/tcpdf-compat/boot-and-discovery/ — eksposur facade dan perilaku alias
- /integrations/tcpdf-compat/method-coverage/ — perilaku dan celah per metode
- /integrations/tcpdf-compat/migration/ — strategi migrasi bertahap
- /integrations/tcpdf-compat/production-usage/ — cara menjalankan adapter di bawah beban
tests/Unit/Compat/Tcpdf/TcpdfOutputTest.php— acuan perilaku keluaran