Skip to content

Cycle de vie du document

La classe Document est la facade centrale de TCPDF-Next. Elle est final, implémente PdfDocumentInterface et fournit toutes les fonctionnalités via 12 traits composables.

Créer un document

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create();

Le constructeur est privé — utilisez toujours la factory statique create(). Cela initialise :

  • Taille de page par défaut : A4 (210 × 297 mm)
  • Marges par défaut : 10mm symétriques
  • Taille de police par défaut : 12pt
  • Couleurs par défaut : texte noir, remplissage blanc, trait noir
  • Largeur de ligne par défaut : 0.2mm (0.57pt)

Métadonnées (HasMetadata)

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

Toutes les méthodes de métadonnées retournent static pour le chaînage. Les métadonnées sont écrites comme XMP (PDF 2.0) et entrées de dictionnaire Info.

Préférences de visualisation

Contrôlez comment les visionneuses PDF affichent le document :

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

Constantes du document

ConstanteValeurDescription
MAX_PAGES10,000Maximum de pages par document

Architecture interne

Le Document contient des références aux sous-moteurs, la plupart étant initialisés paresseusement :

Document
├── DocumentData          # Métadonnées, polices, images, pages
├── PdfWriter             # Sérialisation PDF
├── FontManager           # Chargement et subsetting de polices
├── FontMetrics           # Calcul de largeur de chaîne
├── DrawingEngine         # Rendu formes/dégradés
├── TransformEngine       # Transformations CTM
├── TextRenderer          # Gestion état de texte
├── HeaderFooter          # Rendu en-tête/pied de page
├── ColumnLayout          # Mise en page multi-colonnes
├── BookmarkManager       # Signets PDF
├── LinkManager           # Liens internes/externes
├── TocBuilder            # Table des matières
├── AnnotationManager     # Annotations de texte
├── PageManager           # Manipulation de page
├── FormFieldManager?     # Champs AcroForm (lazy)
├── LayerManager?         # Couches OCG (lazy)
├── TemplateManager?      # Templates de page (lazy)
├── TransactionManager?   # Savepoint/rollback (lazy)
├── BookletLayout?        # Imposition brochure (lazy)
├── FileAttachment?       # Fichiers intégrés (lazy)
├── JavaScriptManager?    # JavaScript document (lazy)
├── SvgParser?            # Rendu SVG (lazy)
├── EpsParser?            # Rendu EPS (lazy)
├── StructureTree?        # PDF balisé (lazy)
├── SpotColorManager?     # Couleurs d'accompagnement (lazy)
├── ImageLoader?          # Chargement d'images (lazy)
├── BiDiResolver?         # Texte bidirectionnel (lazy)
├── Aes256Encryptor?      # Chiffrement AES (lazy)
├── PadesOrchestrator?    # Signatures numériques (lazy)
└── ChromeRenderer?       # Chrome CDP (lazy, Artisan)

Accès aux sous-moteurs

Pour les cas d'utilisation avancés, vous pouvez accéder aux moteurs internes :

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

Exemple complet

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

$pdf = Document::create()
    // Métadonnées
    ->setTitle('Company Report')
    ->setAuthor('Finance Team')
    ->setLanguage('en')

    // Première page — A4 portrait
    ->addPage()
    ->setFont('Helvetica', 'B', 24)
    ->cell(0, 20, 'Annual Report 2026')
    ->ln()

    // Deuxième page — paysage
    ->addPage(PageSize::A4(), Orientation::Landscape)
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'Financial Summary')

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

Distribué sous licence LGPL-3.0-or-later.