Skip to content

Vòng đời Document

Class Document là facade trung tâm của TCPDF-Next. Nó là final, implement PdfDocumentInterface và cung cấp mọi chức năng qua 12 composable trait.

Tạo Document

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create();

Constructor là private — luôn dùng factory create() static. Nó khởi tạo:

  • Kích thước trang mặc định: A4 (210 × 297 mm)
  • Margin mặc định: 10mm đối xứng
  • Kích thước font mặc định: 12pt
  • Màu mặc định: văn bản đen, fill trắng, stroke đen
  • Độ rộng đường kẻ mặc định: 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('en');

Mọi method metadata trả về static để chaining. Metadata được ghi dạng XMP (PDF 2.0) và Info dictionary entry.

Viewer Preference

Kiểm soát cách trình xem PDF hiển thị tài liệu:

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

Hằng số Document

Hằng sốGiá trịMô tả
MAX_PAGES10,000Số trang tối đa mỗi document

Kiến trúc nội bộ

Document giữ tham chiếu đến các sub-engine, hầu hết được khởi tạo lười:

Document
├── DocumentData          # Metadata, font, hình ảnh, trang
├── PdfWriter             # Serialize PDF
├── FontManager           # Tải và subset font
├── FontMetrics           # Tính chiều rộng chuỗi
├── DrawingEngine         # Render hình dạng/gradient
├── TransformEngine       # Biến đổi CTM
├── TextRenderer          # Quản lý trạng thái văn bản
├── HeaderFooter          # Render header/footer
├── ColumnLayout          # Layout nhiều cột
├── BookmarkManager       # Bookmark PDF
├── LinkManager           # Link nội bộ/bên ngoài
├── TocBuilder            # Mục lục
├── AnnotationManager     # Chú thích văn bản
├── PageManager           # Thao tác trang
├── FormFieldManager?     # Trường AcroForm (lười)
├── LayerManager?         # Layer OCG (lười)
├── TemplateManager?      # Template trang (lười)
├── TransactionManager?   # Savepoint/rollback (lười)
├── BookletLayout?        # Booklet imposition (lười)
├── FileAttachment?       # File nhúng (lười)
├── JavaScriptManager?    # JavaScript document (lười)
├── SvgParser?            # Render SVG (lười)
├── EpsParser?            # Render EPS (lười)
├── StructureTree?        # Tagged PDF (lười)
├── SpotColorManager?     # Spot color (lười)
├── ImageLoader?          # Tải hình ảnh (lười)
├── BiDiResolver?         # Văn bản hai chiều (lười)
├── Aes256Encryptor?      # Mã hóa AES (lười)
├── PadesOrchestrator?    # Chữ ký số (lười)
└── ChromeRenderer?       # Chrome CDP (lười, Artisan)

Truy cập Sub-Engine

Cho trường hợp sử dụng nâng cao, bạn có thể truy cập engine nội bộ:

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

Ví dụ đầy đủ

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('en')

    // Trang đầu — A4 dọc
    ->addPage()
    ->setFont('Helvetica', 'B', 24)
    ->cell(0, 20, 'Annual Report 2026')
    ->ln()

    // Trang hai — ngang
    ->addPage(PageSize::A4(), Orientation::Landscape)
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'Financial Summary')

    // Lưu
    ->save('report.pdf');

Phân phối theo giấy phép LGPL-3.0-or-later.