Skip to content

Siklus Hidup Dokumen

Class Document adalah facade sentral dari TCPDF-Next. Class ini bersifat final, mengimplementasikan PdfDocumentInterface, dan menyediakan semua fungsionalitas melalui 12 composable trait.

Membuat Dokumen

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create();

Constructor bersifat private — selalu gunakan static factory create(). Ini menginisialisasi:

  • Ukuran halaman default: A4 (210 x 297 mm)
  • Margin default: 10mm simetris
  • Ukuran font default: 12pt
  • Warna default: teks hitam, fill putih, stroke hitam
  • Lebar garis default: 0,2mm (0,57pt)

Metadata (HasMetadata)

php
$pdf = Document::create()
    ->setTitle('Invoice #001')
    ->setAuthor('Yeeefang')
    ->setSubject('Monthly Invoice')
    ->setKeywords('invoice, payment, 2026')
    ->setCreator('TCPDF-Next')
    ->setLanguage('id');

Semua method metadata mengembalikan static untuk chaining. Metadata ditulis sebagai XMP (PDF 2.0) dan entry Info dictionary.

Preferensi Viewer

Kontrol bagaimana PDF viewer menampilkan dokumen:

php
$pdf->setDisplayMode('fullpage', 'SinglePage')
    ->setViewerPreferences([
        'HideToolbar' => true,
        'HideMenubar' => true,
        'FitWindow' => true,
    ]);

Konstanta Dokumen

KonstantaNilaiDeskripsi
MAX_PAGES10.000Halaman maksimum per dokumen

Arsitektur Internal

Document menyimpan referensi ke sub-engine, yang kebanyakan diinisialisasi secara lazy:

Document
├── DocumentData          # Metadata, font, gambar, halaman
├── PdfWriter             # Serialisasi PDF
├── FontManager           # Loading dan subsetting font
├── FontMetrics           # Kalkulasi lebar string
├── DrawingEngine         # Rendering shape/gradient
├── TransformEngine       # Transform CTM
├── TextRenderer          # Manajemen state teks
├── HeaderFooter          # Rendering header/footer
├── ColumnLayout          # Layout multi-kolom
├── BookmarkManager       # Bookmark PDF
├── LinkManager           # Link internal/eksternal
├── TocBuilder            # Daftar isi
├── AnnotationManager     # Anotasi teks
├── PageManager           # Manipulasi halaman
├── FormFieldManager?     # Field AcroForm (lazy)
├── LayerManager?         # Layer OCG (lazy)
├── TemplateManager?      # Template halaman (lazy)
├── TransactionManager?   # Savepoint/rollback (lazy)
├── BookletLayout?        # Imposisi booklet (lazy)
├── FileAttachment?       # File yang di-embed (lazy)
├── JavaScriptManager?    # JavaScript dokumen (lazy)
├── SvgParser?            # Rendering SVG (lazy)
├── EpsParser?            # Rendering EPS (lazy)
├── StructureTree?        # Tagged PDF (lazy)
├── SpotColorManager?     # Warna spot (lazy)
├── ImageLoader?          # Loading gambar (lazy)
├── BiDiResolver?         # Teks bidirectional (lazy)
├── Aes256Encryptor?      # Enkripsi AES (lazy)
├── PadesOrchestrator?    # Tanda tangan digital (lazy)
└── ChromeRenderer?       # Chrome CDP (lazy, Artisan)

Mengakses Sub-Engine

Untuk kasus penggunaan lanjutan, Anda dapat mengakses engine internal:

php
$fontManager = $pdf->getFontManager();
$writer = $pdf->getWriter();
$drawingEngine = $pdf->getDrawingEngine();
$bookmarkManager = $pdf->getBookmarkManager();

Contoh Lengkap

php
use Yeeefang\TcpdfNext\Core\Document;
use Yeeefang\TcpdfNext\ValueObjects\PageSize;
use Yeeefang\TcpdfNext\ValueObjects\Margin;
use Yeeefang\TcpdfNext\Contracts\Orientation;

$pdf = Document::create()
    // Metadata
    ->setTitle('Company Report')
    ->setAuthor('Finance Team')
    ->setLanguage('id')

    // Halaman pertama — A4 portrait
    ->addPage()
    ->setFont('Helvetica', 'B', 24)
    ->cell(0, 20, 'Annual Report 2026')
    ->ln()

    // Halaman kedua — landscape
    ->addPage(PageSize::A4(), Orientation::Landscape)
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'Financial Summary')

    // Simpan
    ->save('report.pdf');

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