Skip to content

Deep Dive Arsitektur

TCPDF-Next diorganisir menjadi 26 modul di 4 paket, dengan total 213 file sumber PHP.

Ikhtisar Arsitektur

mermaid
graph TB
    subgraph Core["Core (yeeefang/tcpdf-next)"]
        Doc[Document] --> Font[FontRegistry]
        Doc --> Img[ImageRegistry]
        Doc --> Sec[SecurityEngine]
        Doc --> Bar[BarcodeEngine]
    end
    subgraph Extensions["Extensions"]
        Art["Artisan<br/>Chrome CDP"] -->|HTML→PDF| Doc
        Pro["Pro<br/>PAdES B-LTA"] -->|Signing| Sec
    end
    subgraph Frameworks["Frameworks"]
        Lara["Laravel 12"] -->|Facade| Doc
        Sym["Symfony 7"] -->|Bundle| Doc
        CI["CodeIgniter 4"] -->|Service| Doc
    end
    Adapt["Adaptation<br/>Legacy API"] -.->|Compat Layer| Doc

Statistik Proyek

MetrikCoreLaravelArtisanProTotal
File sumber PHP14841747213
Modul1612726
Test9087 class908+
Assertion28.88128.881+
Level PHPStan1010101010

Peta Namespace

Core (yeeefang/tcpdf-next)

Yeeefang\TcpdfNext\
├── Core\               # Document, ObjectRegistry, TransactionManager, CrossReferenceStream
│   └── Concerns\       # 12 trait composable (HasMetadata, HasPages, ...)
├── Contracts\          # PdfDocumentInterface, SignerInterface, HsmSignerInterface, enum
├── ValueObjects\       # PageSize, Dimension, Margin, Position, Unit
├── Support\            # BinaryBuffer
├── Content\            # TextRenderer, JavaScriptManager, Hyphenator
│   └── Hyphenation\    # HyphenationPatterns
├── Typography\         # FontManager, TrueTypeParser, Type1Parser, FontSubsetter, BiDiResolver
├── Graphics\           # DrawingEngine, TransformEngine, Color, ImageLoader, SvgParser
├── Layout\             # HeaderFooter, ColumnLayout, BookletLayout, PageManager
├── Html\               # HtmlParser, TableParser, CssRule
├── Form\               # FormFieldManager, FormFlattener
├── Barcode\            # Barcode1D, Barcode2D, BarcodeRenderer
│   ├── QrCode\         # QrEncoder
│   ├── DataMatrix\     # DataMatrixEncoder
│   └── Pdf417\         # Pdf417Encoder
├── Navigation\         # BookmarkManager, LinkManager, TocBuilder, AnnotationManager
├── Accessibility\      # StructureTree, RoleMap, StructureElement
├── Security\           # Enkripsi + Tanda Tangan
│   ├── Encryption\     # Aes256Encryptor, SaslPrep
│   ├── Signature\      # DigitalSigner, PadesOrchestrator, CertificateInfo, SignatureAppearance
│   └── Timestamp\      # TsaClient
└── Writer\             # PdfWriter, Linearizer, ViewerPreferences, class data

Artisan (yeeefang/tcpdf-next-artisan)

Yeeefang\TcpdfNext\
├── Artisan\            # ChromeHtmlRenderer, BrowserPool, ChromeRendererConfig
│   └── Exception\      # ChromeNotAvailableException, ChromeRenderException, PdfParseException
└── Parser\             # PdfTokenizer, CrossRefParser, PdfReader, StreamDecoder, ResourceCollector

Laravel (yeeefang/tcpdf-next-laravel)

Yeeefang\TcpdfNext\Laravel\
├── TcpdfServiceProvider
├── Facades\Pdf
├── Http\PdfResponse
└── Jobs\GeneratePdfJob

Pro (yeeefang/tcpdf-next-pro)

Yeeefang\TcpdfNext\
├── Archive\            # PdfAManager, PdfAVersion, XmpMetadata, OutputIntent
├── Barcode\            # Barcode khusus
│   ├── MicroQr\        # MicroQrEncoder
│   ├── DotCode\        # DotCodeEncoder
│   ├── HanXin\         # HanXinEncoder
│   ├── JabCode\        # JabCodeEncoder (LDPC, interleaver, matriks)
│   ├── Gs1\            # Gs1DataParser
│   └── Imb\            # ImbEncoder
├── Security\
│   ├── Ltv\            # LtvManager, DssBuilder, OcspClient, CrlFetcher, CertificateChainValidator
│   ├── Signature\Hsm\  # Pkcs11Signer, OpenSslEngineSigner
│   ├── Timestamp\      # DocumentTimestamp
│   ├── Asn1\           # CertificateParser, AlgorithmIdentifier
│   └── CertificateTransparency\  # CtValidationResult
└── Writer\             # IncrementalUpdateWriter

Inisialisasi Lazy

Class Document hanya menginstansiasi sub-engine yang esensial di constructor:

Selalu diinisialisasi: DocumentData, PdfWriter, FontManager, DrawingEngine, TransformEngine, TextRenderer, HeaderFooter, ColumnLayout, BookmarkManager, LinkManager, TocBuilder, AnnotationManager, PageManager, FontMetrics

Lazy (null sampai pertama kali digunakan): FormFieldManager, LayerManager, TemplateManager, TransactionManager, BookletLayout, FileAttachment, JavaScriptManager, SvgParser, EpsParser, StructureTree, SpotColorManager, ImageLoader, BiDiResolver

Ini menjaga footprint memori dasar tetap kecil untuk dokumen sederhana sambil menyediakan fungsionalitas penuh saat diperlukan.

Integrasi Ekstensi

Paket Core mendeteksi ekstensi saat runtime via class_exists():

php
// Deteksi Artisan
$rendererClass = 'Yeeefang\\TcpdfNext\\Artisan\\ChromeHtmlRenderer';
if (!class_exists($rendererClass)) {
    throw new \RuntimeException(
        'Chrome renderer requires yeeefang/tcpdf-next-artisan.'
    );
}

Ini berarti:

  • Core memiliki nol hard dependency pada Artisan, Laravel, atau Pro
  • Ekstensi di-autoload oleh Composer — cukup composer require dan langsung berfungsi
  • ServiceProvider Laravel mendeteksi otomatis Artisan dan Pro, mengonfigurasi binding yang sesuai

Didistribusikan di bawah lisensi LGPL-3.0-or-later.