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
| Konstanta | Nilai | Deskripsi |
|---|---|---|
MAX_PAGES | 10.000 | Halaman 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');