Aller au contenu

Référence de l’API Artisan

Le package Artisan (nextpdf/artisan) expose deux ensembles d’API liés : une API de rendu Chrome — ChromeRendererConfig, ChromeHtmlRenderer, ChromeSecurityPolicy, ChromeRenderResult, ViewportCalculator, BrowserPool — qui transforme un fragment HTML en PDF produit par Chrome, et une API limitée de parsing/import — PdfReader, PageImporter, ImportedFormXObject, ainsi que les classes tokenizer/xref qui les accompagnent — qui réintègre cette sortie rendue dans un document NextPDF sous forme de Form XObject, avec un texte qui reste sélectionnable.

Commence ici : si tu veux simplement générer un PDF à partir de HTML, tu n’as généralement pas besoin de toucher ce package directement. Associe un ChromeRendererConfig à un Document NextPDF et appelle writeHtmlChrome() (voir le guide de démarrage rapide). Tourne-toi vers les classes ci-dessous uniquement si tu intègres un renderer dans un worker ou si tu lances des diagnostics du parser. Le premier exemple sous Tâches courantes illustre ce chemin en un seul appel.

Les trois flux ci-dessous couvrent la quasi-totalité des usages réels, de l’appel de plus haut niveau jusqu’au pipeline explicite de rendu et d’import. Chaque exemple a été vérifié avec nextpdf-Artisan/src (ainsi qu’avec le README.md / ci/tests/ du package).

Rendre un fragment HTML en PDF avec du texte sélectionnable — l’appel canonique en une seule étape.

<?php
declare(strict_types=1);
use NextPDF\Core\Document;
use NextPDF\Artisan\ChromeRendererConfig;
require __DIR__ . '/vendor/autoload.php';
$config = new ChromeRendererConfig(chromeBinaryPath: '/usr/bin/chromium');
$doc = Document::createStandalone();
$doc->setChromeRendererConfig($config);
$doc->addPage();
$doc->writeHtmlChrome('<div style="display:flex;gap:20px"><h2>Revenue</h2><p>$124,500</p></div>');
$doc->save('/tmp/report.pdf');

Ce que fait cet appel : Chrome met en page le fragment, et la passerelle intègre la page 0 sous forme de Form XObject afin que le texte reste sélectionnable. writeHtmlChrome(string $html, ?float $width = null, ?float $height = null): static ajuste automatiquement la hauteur quand $height vaut null.

Lance le renderer et importe la page toi-même — le pipeline explicite derrière writeHtmlChrome(), pour les workers et les placements personnalisés.

<?php
declare(strict_types=1);
use NextPDF\Artisan\ChromeHtmlRenderer;
use NextPDF\Artisan\ChromeRendererConfig;
use NextPDF\Artisan\ImportedFormXObject;
use NextPDF\Artisan\PageImporter;
use NextPDF\Parser\PdfReader;
$renderer = new ChromeHtmlRenderer(new ChromeRendererConfig(renderTimeout: 30));
try {
$result = $renderer->render($html, widthPt: 595.28);
$reader = new PdfReader($result->getPdfData());
$reader->parse();
$form = (new PageImporter())->import($reader);
} finally {
$renderer->close();
}

Ce que fait ce pipeline : il produit les octets PDF avec Chrome, les parse, puis importe la page 0 dans un ImportedFormXObject que tu peux placer. Appelle toujours close() sur le renderer pour libérer le processus Chrome.

Construis la config à partir d’un tableau au style framework — pour config/*.php ou les paramètres d’un bundle, au lieu d’arguments de constructeur codés en dur.

<?php
declare(strict_types=1);
use NextPDF\Artisan\ChromeRendererConfig;
$config = ChromeRendererConfig::fromArray([
'chrome_binary' => '/usr/bin/chromium',
'render_timeout' => 45,
'max_html_size' => 2_000_000,
'no_sandbox' => false,
]);

Ce que fait cette config : elle mappe un tableau de config en snake_case sur le constructeur ; les clés absentes utilisent les valeurs par défaut, et chrome_binary n’est appliqué que lorsqu’il s’agit d’une chaîne non vide.

Ces types configurent et exécutent un rendu : construis un ChromeRendererConfig, confie-le à un ChromeHtmlRenderer, puis appelle render() pour obtenir un ChromeRenderResult.

SymboleParamètresComportement par défautRetourneLève ou échoue avecNotes
new ChromeRendererConfig(?string $chromeBinaryPath = null, int $renderTimeout = 30, string $defaultCss = '', int $maxHtmlSize = 5000000, bool $noSandbox = false)Chemin du binaire, timeout, CSS, limite de taille HTML, drapeau sandbox.Détecte automatiquement Chrome quand le chemin du binaire est null ; le sandbox reste activé sauf désactivation explicite.ChromeRendererConfigaucune attendue.N’active noSandbox que lorsque l’environnement d’exécution l’exige.
ChromeRendererConfig::fromArray(array $config)chrome_binary, render_timeout, default_css, max_html_size, no_sandbox.Les valeurs manquantes utilisent les valeurs par défaut du constructeur.ChromeRendererConfigLes types non conformes retombent sur les valeurs par défaut pour les clés optionnelles.Correspond aux tableaux de configuration de style framework.
new ChromeHtmlRenderer(ChromeRendererConfig $config, ?LoggerInterface $logger = null, ?HtmlSecurityPolicyInterface $htmlSecurityPolicy = null)Config, logger optionnel, politique HTML optionnelle pour le parsing.Utilise DefaultHtmlSecurityPolicy quand aucune politique n’est fournie.ChromeHtmlRendererLes erreurs de configuration de Chrome surviennent au premier rendu.Le renderer détient un pool de navigateurs jusqu’à close().
ChromeHtmlRenderer::render(string $html, float $widthPt, float $heightPt = 0)html : fragment en entrée ; widthPt : largeur du papier ; heightPt : hauteur cible ou automatique.Calcule automatiquement la hauteur du contenu quand heightPt <= 0.ChromeRenderResultChromeRenderException ; échec de la validation de taille du HTML.Bloque les requêtes réseau de sous-ressources via CDP.
ChromeHtmlRenderer::getHtmlSecurityPolicy()aucun.Retourne la politique configurée au niveau du parsing.HtmlSecurityPolicyInterfaceaucune attendue.Complète les contrôles de Chrome au niveau du transport.
ChromeHtmlRenderer::close()aucun.Ferme le pool de navigateurs et le vide.voidDes erreurs d’arrêt du navigateur peuvent remonter depuis la bibliothèque sous-jacente.À appeler lors de l’arrêt du worker.

Tourne-toi vers ces classes quand tu valides et encapsules toi-même du HTML externe avant un rendu, au lieu de passer par ChromeHtmlRenderer::render() (qui les appelle déjà).

SymboleParamètresComportement par défautRetourneLève ou échoue avecNotes
ChromeSecurityPolicy::validate(string $html, int $maxSize)Entrée HTML et taille maximale en octets.N’accepte l’entrée que si la taille est conforme et qu’aucune construction interdite n’est détectée.voidChromeRenderException ou exception de validation.À exécuter avant de confier le rendu au navigateur quand tu acceptes du HTML externe.
ChromeSecurityPolicy::wrapHtml(string $html, int $viewportWidth, string $defaultCss = '')Fragment HTML, largeur du viewport, CSS par défaut optionnel.Produit un document de rendu complet autour du fragment.stringErreurs de validation ou de construction de chaîne.Sépare le CSS propre au renderer du HTML applicatif.

Utilise-les pour lire la sortie d’un rendu (ChromeRenderResult) et pour convertir entre les points PDF et les pixels CSS de Chrome quand tu dimensionnes un viewport ou calcules une hauteur.

SymboleParamètresComportement par défautRetourneLève ou échoue avecNotes
new ChromeRenderResult(string $pdfData, float $widthPt, float $heightPt, float $contentHeightCssPx)Octets PDF bruts, largeur, hauteur, hauteur de contenu mesurée.Aucune validation au-delà des propriétés typées du constructeur.ChromeRenderResultaucune attendue.Généralement retourné par ChromeHtmlRenderer::render().
ChromeRenderResult::getPdfData()aucun.Retourne les octets PDF bruts produits par Chrome.stringaucune attendue.À utiliser avec PdfReader et PageImporter lors de l’intégration.
ChromeRenderResult::getWidthPt()aucun.Retourne la largeur demandée en points.floataucune attendue.Utilisé pour dimensionner l’objet form importé.
ChromeRenderResult::getHeightPt()aucun.Retourne la hauteur calculée ou demandée en points.floataucune attendue.La hauteur automatique inclut une marge de mise en page d’impression.
ViewportCalculator::pointsToCssPx(float $pt)pt : points PDF.Convertit sur la base de 96 px CSS pour 72 points PDF.intaucune attendue.Arrondi pour la largeur du viewport Chrome.
ViewportCalculator::cssPxToPoints(float $px)px : pixels CSS.Convertit sur la base de 72 points PDF pour 96 px CSS.floataucune attendue.Utilisé pour le calcul de la hauteur automatique.

C’est le chemin d’import central : parse les octets PDF de Chrome avec PdfReader, puis confie le reader à PageImporter::import() pour obtenir une page intégrable ; les autres méthodes de PdfReader servent au diagnostic.

SymboleParamètresComportement par défautRetourneLève ou échoue avecNotes
new PdfReader(string $data)data : octets PDF complets.Le parser n’est pas lancé avant parse().PdfReaderaucune attendue.Conçu pour les PDF générés par Chrome.
PdfReader::parse()aucun.Parse la chaîne xref et le trailer.voidPdfParseException pour une structure PDF invalide.Doit être appelée avant tout accès aux objets/pages.
PdfReader::getObject(int $objNum)Numéro d’objet.Résout l’objet parsé par son numéro.PdfObjectPdfParseException quand l’objet est absent ou mal formé.À utiliser après parse().
PdfReader::getTrailer()aucun.Retourne le dictionnaire du trailer parsé.arrayPdfParseException quand les données du trailer sont indisponibles.Utilisé par les diagnostics et l’analyse des révisions.
PdfReader::getObjectNumbers()aucun.Retourne les numéros d’objets parsés.arrayaucune attendue après le parsing.Utile pour les diagnostics de l’importeur.
PdfReader::getPage(int $pageIndex)pageIndex : index de page à base zéro.Aucun parsing implicite.PdfObjectPdfParseException quand la page est absente ou hors limites.L’importeur prend par défaut la page 0.
PdfReader::getPageContentStream(PdfObject $page)page : objet page parsé.Résout le flux de contenu.stringPdfParseException pour des flux invalides.Un flux vide provoque l’échec de l’importeur.
PdfReader::getPageResources(PdfObject $page)page : objet page parsé.Résout les ressources de la page.arrayPdfParseException pour des ressources invalides.Le dictionnaire de ressources est intégré avec l’objet form.
PdfReader::getPageMediaBox(PdfObject $page)page : objet page parsé.Utilise des dimensions de type A4 par défaut si elle est absente.arrayÉchecs du parser.Retourne des coordonnées dans l’espace PDF.
PdfReader::resolveRef(mixed $value)Valeur parsée.Résout récursivement les références d’objets le cas échéant.mixedPdfParseException pour des références invalides.Utilitaire interne exposé pour les workflows de l’importeur.
PdfReader::collectPageResources(PdfObject $page)page : objet page parsé.Parcourt les références de ressources de la page.arrayÉchecs du parser.Utilisé pour intégrer les objets dépendants avec les pages importées.
PdfReader::getRevisionCount()aucun.Compte les révisions incrémentales parsées.intaucune attendue après le parsing.Utile pour les PDF signés ou mis à jour de manière incrémentale.
PdfReader::getRevisionXRef(int $index)Index de révision à base zéro.Retourne une table xref de révision.RevisionXRefTablePdfParseException pour un index invalide.À utiliser pour les diagnostics de révision de bas niveau.
PdfReader::getRevisions()aucun.Retourne toutes les tables xref de révision parsées.arrayaucune attendue après le parsing.Vue en lecture seule de l’état du parser.
PageImporter::import(PdfReader $reader, int $pageIndex = 0)Reader parsé et index de page à base zéro.Importe la première page lorsqu’il est omis.ImportedFormXObjectPdfParseException quand la page ne peut pas être extraite.Collecte le flux de contenu, la media box, les ressources et les objets référencés.

Ce sont les objets de valeur et utilitaires que le parser retourne ou utilise en interne — tourne-toi vers eux quand tu inspectes des objets importés, des ressources, des flux ou des tables de révision.

SymboleParamètresComportement par défautRetourneLève ou échoue avecNotes
new ImportedFormXObject(string $contentStream, array $mediaBox, array $embeddedObjects, array $resourcesDict)Flux de contenu décodé, media box, objets intégrés, dictionnaire de ressources.Stocke une charge utile autonome de form importé.ImportedFormXObjectaucune attendue.Généralement retourné par PageImporter::import().
ImportedFormXObject::getWidth()aucun.Retourne la largeur du form importé en points.floataucune attendue.À utiliser quand tu places la sortie de Chrome dans une page.
ImportedFormXObject::getHeight()aucun.Retourne la hauteur du form importé en points.floataucune attendue.Les résultats de rendu à hauteur automatique se propagent à travers cette valeur.
ImportedFormXObject::getEmbeddedObjects()aucun.Retourne les objets requis par le form importé.arrayaucune attendue.Le writer utilise ces objets pour préserver les ressources.
ImportedFormXObject::getResourcesDict()aucun.Retourne le dictionnaire de ressources importé.arrayaucune attendue.Utilisé lors de la construction du Form XObject.
ImportedFormXObject::getMediaBox()aucun.Retourne la media box importée.arrayaucune attendue.À utiliser pour les diagnostics de placement.
ImportedFormXObject::getContentStream()aucun.Retourne le flux de contenu de la page importée.stringaucune attendue.Destiné à l’intégration writer/import.
new PdfObject(int $objectNumber, int $generation, array $dictionary, ?string $rawStreamData = null, ?string $decodedStreamData = null, ?string $rawDictionaryBytes = null)Numéro d’objet, génération, dictionnaire parsé, octets de flux optionnels, flux décodé optionnel, octets de dictionnaire bruts optionnels.Stocke l’état de l’objet parsé.PdfObjectaucune attendue.Créé par les composants internes du parser.
PdfObject::getRawDictionaryBytes()aucun.Retourne les octets d’origine du dictionnaire quand ils sont disponibles.`stringnull`aucune attendue.
PdfObject::getRawStreamData()aucun.Retourne les octets de flux non décodés quand ils sont disponibles.`stringnull`aucune attendue.
PdfObject::getDictionary()aucun.Retourne les entrées de dictionnaire parsées.arrayaucune attendue.Vue en lecture seule du parser.
PdfObject::get(string $key)Clé du dictionnaire.Retourne null quand la clé est absente.mixedaucune attendue.Évite aux appelants de parser des dictionnaires bruts.
PdfObject::getRef(string $key)Clé du dictionnaire.Retourne le tuple de référence d’objet quand la valeur est une référence.`arraynull`aucune attendue.
PdfObject::getArray(string $key)Clé du dictionnaire.Retourne une valeur de type tableau, ou un tableau vide quand elle est indisponible.arrayaucune attendue.Wrapper pratique pour les entrées de dictionnaire dont la valeur est un tableau.
PdfObject::hasStream()aucun.Vérifie si des octets de flux sont présents.boolaucune attendue.Distingue les objets constitués uniquement d’un dictionnaire.
PdfObject::getType()aucun.Lit /Type.`stringnull`aucune attendue.
PdfObject::getSubtype()aucun.Lit /Subtype.`stringnull`aucune attendue.
RevisionExtractor::extractRevision(string $pdfData, PdfReader $reader, int $revision)Octets PDF, un reader parsé et l’index de révision à base zéro.Extrait une révision incrémentale.stringPdfParseException pour des limites invalides.Utilisé par les tests et les diagnostics du parser.
RevisionExtractor::getRevisionBoundaries(string $pdfData, PdfReader $reader)Octets PDF et un reader parsé.Identifie les plages d’octets des révisions incrémentales.arrayPdfParseException pour une structure xref mal formée.Aide à analyser les PDF signés ou mis à jour de manière incrémentale.
`StreamDecoder::decode(string $data, stringarray $filter)`Octets de flux et un ou plusieurs filtres PDF.Applique les filtres dans l’ordre.stringPdfParseException pour des filtres non pris en charge ou invalides.
new ResourceCollector(PdfReader $reader)Reader parsé.Démarre avec un ensemble vide d’objets collectés.ResourceCollectoraucune attendue.Utilisé par PdfReader::collectPageResources().
ResourceCollector::traverse(mixed $value, int $depth = 0)Valeur parsée et profondeur de récursion.Parcourt les références de ressources jusqu’aux limites de profondeur internes.voidÉchecs du parser pour des références invalides.Utilitaire interne pour la fermeture des ressources lors de l’import de page.
ResourceCollector::getCollected()aucun.Retourne les objets de ressources collectés.arrayaucune attendue.À appeler après traverse().
new RevisionXRefTable(int $index, int $xrefOffset, array $xrefEntries, array $trailer, ?int $prevOffset)Index de révision, offset xref, entrées xref, trailer, offset précédent optionnel.Instantané immuable d’une révision incrémentale.RevisionXRefTableaucune attendue.Créé par les composants internes du parser.
RevisionXRefTable::getObjectNumbers()aucun.Retourne les numéros d’objets actifs dans la table de révision.arrayaucune attendue.API de diagnostic de révision bas niveau.
RevisionXRefTable::getActiveObjectCount()aucun.Compte les objets actifs.intaucune attendue.Utile pour les assertions du parser.
RevisionXRefTable::hasRootUpdate()aucun.Indique si la révision met à jour la racine du document.boolaucune attendue.Utile pour l’analyse des mises à jour incrémentales.
RevisionXRefTable::getSize()aucun.Retourne la valeur de taille de la table xref.intaucune attendue.Reflète les métadonnées xref PDF parsées.

Tourne-toi vers ces classes uniquement pour des diagnostics approfondis du parser ou la réduction de fixtures — elles exposent le lexer et le mécanisme de référence croisée sous PdfReader, et ne sont pas nécessaires pour un import normal.

SymboleParamètresComportement par défautRetourneLève ou échoue avecNotes
new PdfTokenizer(string $data, int $offset = 0)Octets PDF et offset initial optionnel.Démarre à l’offset zéro.PdfTokenizeraucune attendue.Parser lexical de bas niveau.
PdfTokenizer::getOffset()aucun.Retourne l’offset d’octet courant.intaucune attendue.Utilitaire de diagnostic pour les erreurs du parser.
PdfTokenizer::setOffset(int $offset)Offset d’octet.Déplace le curseur du tokenizer.voidPdfParseException pour un offset invalide.À utiliser avec précaution ; les appelants sont responsables de l’état du parser.
PdfTokenizer::isEof()aucun.Vérifie si le curseur a atteint la fin.boolaucune attendue.Utilitaire de boucle du parser bas niveau.
PdfTokenizer::skipWhitespace()aucun.Avance au-delà des espaces et des commentaires PDF.voidaucune attendue.Utilisé avant la lecture des tokens.
PdfTokenizer::readToken()aucun.Lit le prochain token scalaire.`stringintfloat
PdfTokenizer::readName()aucun.Lit un objet nom PDF.stringPdfParseException pour un nom mal formé.Décode les échappements de nom.
PdfTokenizer::readLiteralString()aucun.Lit une chaîne littérale.stringPdfParseException pour une chaîne mal formée.Gère les parenthèses imbriquées et les échappements.
PdfTokenizer::readHexString()aucun.Lit une chaîne hexadécimale.stringPdfParseException pour un hexadécimal mal formé.Complète l’hexadécimal de longueur impaire selon les règles du parser.
PdfTokenizer::readNumber()aucun.Lit un entier ou un flottant.`intfloat`PdfParseException pour un nombre invalide.
PdfTokenizer::readKeyword()aucun.Lit un mot-clé PDF.stringPdfParseException pour un mot-clé invalide.Centralise le parsing des mots-clés.
PdfTokenizer::readDictionary()aucun.Lit un dictionnaire PDF.arrayPdfParseException pour des dictionnaires mal formés.Utilisé pour les objets, les flux et les trailers.
PdfTokenizer::readArray()aucun.Lit un tableau PDF.arrayPdfParseException pour des tableaux mal formés.Utilitaire de parsing récursif.
PdfTokenizer::readValue()aucun.Lit toute valeur PDF prise en charge.mixedPdfParseException pour des valeurs mal formées.Primitive courante du parser.
PdfTokenizer::readStreamData(int $length)Longueur du flux.Lit exactement les octets de flux demandés.stringPdfParseException pour des limites de flux invalides.Utilisé après la résolution de la longueur de flux du dictionnaire.
PdfTokenizer::peek(int $length = 1)Nombre d’octets.Lit à l’avance sans avancer le curseur.stringaucune attendue.Utile pour le branchement du parser.
PdfTokenizer::searchBackward(string $pattern, int $startFrom = 0)Motif et offset de départ optionnel.Recherche en arrière depuis la fin ou l’offset fourni.`intfalse`aucune attendue.
PdfTokenizer::readLine()aucun.Lit une ligne à partir de l’offset courant.stringaucune attendue.Utilitaire de scanner de bas niveau.
CrossRefParser::parseXRefTable(string $data, int $offset)Octets PDF et offset de la table xref.Parse les entrées de table xref classiques.arrayPdfParseException pour des données xref mal formées.API de parser de bas niveau.
CrossRefParser::parseXRefStream(string $data, int $offset)Octets PDF et offset du flux xref.Parse les entrées de flux xref.arrayPdfParseException pour des données de flux mal formées.Prend en charge les flux xref PDF modernes.

EInvoiceServiceFactory résout en chargement paresseux les contrats de facturation électronique Premium optionnels (en retournant null quand ils sont absents). BrowserPool est l’utilitaire de cycle de vie Chrome détenu par le renderer, que tu ne gères directement que dans les workers de longue durée.

SymboleParamètresComportement par défautRetourneLève ou échoue avecNotes
EInvoiceServiceFactory::makeEmbedder()aucun.Retourne null sauf si la prise en charge de la facturation électronique Premium Pro est installée.`EmbedderInterfacenull`Erreurs de construction du package optionnel.
EInvoiceServiceFactory::makeValidator()aucun.Retourne null sauf si la prise en charge de la validation Premium Enterprise est installée.`ValidatorInterfacenull`Erreurs de construction du package optionnel.
EInvoiceServiceFactory::makeDefaultProfile()aucun.Retourne le profil de facturation électronique par défaut quand il est disponible.`ProfileInterfacenull`Erreurs du package optionnel.
EInvoiceServiceFactory::makeSchematronRunner()aucun.Retourne null sauf si la prise en charge de Schematron Premium Enterprise est installée.`SchematronRunnerInterfacenull`Erreurs de construction du package optionnel.
new BrowserPool(ChromeRendererConfig $config, ?LoggerInterface $logger = null)Config du renderer et logger optionnel.Le navigateur ne démarre qu’au premier getBrowser().BrowserPoolaucune attendue avant le démarrage du navigateur.Utilitaire de cycle de vie détenu par le renderer.
BrowserPool::getBrowser()aucun.Démarre ou retourne l’instance courante du navigateur Chrome.BrowserErreurs de démarrage du navigateur.Utilitaire de cycle de vie détenu par le renderer.
BrowserPool::incrementRenderCount()aucun.Incrémente le compteur de rendus et effectue une rotation quand la politique du pool l’exige.voidErreurs de cycle de vie du navigateur.Utilisé par les workers de longue durée.
BrowserPool::close()aucun.Ferme l’instance de navigateur gérée.voidErreurs d’arrêt du navigateur.À appeler lors de l’arrêt du worker.
  • Le renderer n’est pas un sandbox de navigateur pour du HTML non fiable. Valide la taille, la politique de ressources et l’autorisation de l’appelant avant le rendu.
  • Les API du parser sont volontairement restreintes. Elles servent à l’import de la sortie de Chrome, pas à la réparation générale de PDF.
  • Ferme explicitement les renderers dans les workers de longue durée.