Lewati ke konten

Integrasi NextPDF compat-legacy

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/).

Terminal window
composer require nextpdf/compat-legacy:^3.0

Perintah ini menyelesaikan nextpdf/core ^3.0 secara transitif. Untuk persyaratan lengkap dan pemeriksaan verifikasi, lihat /integrations/tcpdf-compat/install/.

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/require menjadi use 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 \TCPDF dan keempat kelas bantuannya — hanya jika nama-nama tersebut belum digunakan. Mekanisme, idempotensi, dan aturan konflik dengan TCPDF asli: /integrations/tcpdf-compat/boot-and-discovery/.
examples/integration-boot.php
<?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();

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).

examples/integration-container.php
<?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.

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/.

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:

examples/integration-smoke.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 masukTujuan
NextPDF\Compat\Tcpdf\TCPDFFacade 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\AdaptationConfigObjek konfigurasi imutabel modern.
NextPDF\Compat\Contracts\CompatAdapterInterfaceKontrak compat yang digunakan bersama.

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.

  • 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