Aller au contenu

Configurer le package NextPDF pour Laravel

config/nextpdf.php est publié avec php artisan vendor:publish --tag=nextpdf-config. Chaque clé dispose d’une variable d’environnement de secours et d’une valeur par défaut codée en dur. Cette page documente chaque clé exactement telle qu’elle apparaît dans le fichier config/nextpdf.php du package.

Fenêtre de terminal
php artisan vendor:publish --tag=nextpdf-config

Le provider fusionne aussi les valeurs par défaut du package sous la clé de configuration nextpdf pendant register(). Les clés non définies utilisent donc les valeurs ci-dessous, même avant la publication.

La plupart des variables d’environnement acceptent soit un nom NEXTPDF_*, soit un nom historique TCPDF_*. L’ancien préfixe reste pris en charge pendant la période de transition documentée dans UPGRADE.md ; les nouveaux déploiements doivent utiliser la forme NEXTPDF_*. Le fichier de configuration résout les valeurs dans cet ordre : variable d’environnement → valeur du fichier publié → valeur par défaut du package.

CléEnv (principale)DéfautEffet
page_formatNEXTPDF_PAGE_FORMATA4Format de page par défaut (A4, A3, A5, Letter, Legal, Tabloid)
orientationNEXTPDF_ORIENTATIONPPortrait (P) ou paysage (L)
unitNEXTPDF_UNITmmUnité de mesure (pt, mm, cm, in)
defaults.creatorNEXTPDF_CREATORNextPDFMétadonnée du créateur du document ; appliquée au binding PdfDocumentInterface du document
defaults.authorNEXTPDF_AUTHOR(vide)Métadonnée d’auteur ; appliquée uniquement lorsqu’elle n’est pas vide
defaults.languageNEXTPDF_LANGenLangue du document ; appliquée au binding du document
defaults.margin_top / _right / _bottom / _left10Marges par défaut
defaults.font_familydejavusansFamille de police par défaut
defaults.font_size12Taille de police par défaut
defaults.trim_boxnullTrimBox [left, bottom, right, top] en points, ou null
defaults.bleed_boxnullBleedBox [left, bottom, right, top] en points, ou null

Le provider applique defaults.creator, defaults.language et, lorsqu’il est défini, defaults.author à chaque document fraîchement résolu. La branche defaults.author est ignorée lorsque la valeur est vide.

CléEnv (principale)DéfautEffet
pdfaNEXTPDF_PDFAnullNiveau d’archivage PDF/A (null, 4, 4e, 4f). Une valeur non nulle active PDF/A sur le binding du document et nécessite nextpdf/premium
fonts_pathNEXTPDF_FONTS_PATHresource_path('fonts')Répertoire des polices TrueType supplémentaires ; pilote le chemin de recherche du registre des polices
cache_pathNEXTPDF_CACHE_PATHstorage_path('framework/cache/tcpdf')Répertoire de cache pour les polices analysées et les fichiers temporaires
icc_profile.rgbNEXTPDF_ICC_PROFILE_RGBnullChemin du profil ICC RGB ; requis pour PDF/A
icc_profile.cmykNEXTPDF_ICC_PROFILE_CMYKnullProfil ICC CMYK facultatif pour les workflows d’impression
font_cache_lockingNEXTPDF_FONT_CACHE_LOCKINGtrueUtilise flock sur le cache des polices pour éviter toute corruption lorsque des workers de file concurrents écrivent

Définir pdfa sur une valeur non nulle nécessite le niveau Premium. Sans nextpdf/premium, résoudre le binding du document lorsque pdfa est défini déclenche une erreur class-not-found pour le type de version PDF/A. Cette page ne décrit pas le comportement d’archivage Premium ; voir la documentation Premium.

Mémoire des workers (runtimes à longue durée de vie)

Section intitulée « Mémoire des workers (runtimes à longue durée de vie) »
CléEnv (principale)DéfautEffet
preload_fonts[]Liste des chemins absolus vers les fichiers de police analysés au démarrage du worker. Le registre des polices est verrouillé après le préchauffage
image_cache_mbNEXTPDF_IMAGE_CACHE_MB50Budget du cache d’images LRU en Mo. 0 désactive le cache. Le provider n’impose aucune limite supérieure

Le provider n’impose aucune limite supérieure au budget du cache d’images. Applique une limite de mémoire du conteneur ou php.inimemory_limit pour le borner. Le fichier de configuration recommande un maximum pratique de 256 Mo.

CléEnv (principale)DéfautEffet
signature.enabledNEXTPDF_SIGN_ENABLEDfalseLorsque false (ou si le certificat est vide), SignerInterface se résout en null
signature.certificateNEXTPDF_SIGN_CERTnullChemin du certificat de signature
signature.private_keyNEXTPDF_SIGN_KEYnullChemin de la clé privée
signature.passwordNEXTPDF_SIGN_PASSWORD(vide)Phrase secrète de la clé
signature.extra_certs[]Chemins des certificats de CA intermédiaires
signature.levelNEXTPDF_SIGN_LEVELB-BNiveau baseline PAdES transmis au signataire

Le package Core documenté ici ne fournit pas de signataire concret ; le binding SignerInterface se résout en null jusqu’à ce que nextpdf/premium fournisse un signataire. Avec Premium, level: B-B produit une signature baseline PAdES B-B. Les niveaux baseline PAdES supérieurs dépendent d’une autorité d’horodatage configurée et d’une capacité Premium ; cette page ne documente pas ces niveaux.

CléEnv (principale)DéfautEffet
tsa.urlNEXTPDF_TSA_URLnullPoint de terminaison TSA. Lorsqu’il est vide, TsaClient se résout en null
tsa.username / tsa.passwordNEXTPDF_TSA_USERNAME / _PASSWORD(empty)Identifiants HTTP de la TSA
tsa.cert / tsa.keyNEXTPDF_TSA_CERT / _KEYnullCertificat / clé client pour le mTLS avec la TSA
tsa.timeoutNEXTPDF_TSA_TIMEOUT30Délai d’expiration HTTP en secondes pour le client PSR-18
tsa.pinned_public_keys[]Empreintes SPKI SHA-256 en Base64 (RFC 7469). Une valeur vide désactive l’épinglage
tsa.warn_on_key_rotationNEXTPDF_TSA_WARN_ROTATIONtrueÉmet un avertissement lorsque la TSA présente un SPKI non épinglé
tsa.allow_insecure_httpNEXTPDF_TSA_ALLOW_INSECURE_HTTPfalseAutorise le HTTP en clair vers la TSA. À laisser à false en production
CléEnv (principale)DéfautEffet
ocsp_cache.enabledNEXTPDF_OCSP_CACHE_ENABLEDtrueMet en cache les réponses OCSP pendant la validation
ocsp_cache.ttlNEXTPDF_OCSP_CACHE_TTL86400TTL du cache en secondes
ocsp_cache.directoryNEXTPDF_OCSP_CACHE_DIRnullRépertoire du cache ; null conserve le cache uniquement en mémoire
CléEnv (principale)DéfautEffet
queue.connectionNEXTPDF_QUEUE_CONNECTIONnullConnexion de la file d’attente ; null utilise la connexion par défaut
queue.queueNEXTPDF_QUEUE_NAMEpdfNom de la file vers laquelle GeneratePdfJob est poussé
queue.timeoutNEXTPDF_QUEUE_TIMEOUT120Délai d’expiration par job en secondes
CléEnv (principale)DéfautEffet
artisan.chrome_binaryNEXTPDF_ARTISAN_CHROME_BINARYvaleur d’env ou non définieChemin vers le binaire Chrome/Chromium
artisan.render_timeoutNEXTPDF_ARTISAN_RENDER_TIMEOUT30Délai d’expiration du rendu en secondes
artisan.default_cssNEXTPDF_ARTISAN_DEFAULT_CSS(vide)CSS par défaut injecté dans le HTML rendu
artisan.no_sandboxNEXTPDF_ARTISAN_NO_SANDBOXfalseDésactive la sandbox de Chrome
artisan.max_html_sizeNEXTPDF_ARTISAN_MAX_HTML_SIZE5000000Taille maximale de l’entrée HTML en octets

La section artisan est appliquée au binding du document uniquement si une classe browser-factory Chrome est présente (l’extension nextpdf/artisan). Lorsqu’elle est absente, la section est ignorée.

resource: config/nextpdf.php (subset, verified against the published file)
<?php
declare(strict_types=1);
return [
'page_format' => env('NEXTPDF_PAGE_FORMAT', 'A4'),
'orientation' => env('NEXTPDF_ORIENTATION', 'P'),
'unit' => env('NEXTPDF_UNIT', 'mm'),
'pdfa' => env('NEXTPDF_PDFA', null),
'fonts_path' => env('NEXTPDF_FONTS_PATH', resource_path('fonts')),
'preload_fonts' => [],
'image_cache_mb' => env('NEXTPDF_IMAGE_CACHE_MB', 50),
'queue' => [
'connection' => env('NEXTPDF_QUEUE_CONNECTION', null),
'queue' => env('NEXTPDF_QUEUE_NAME', 'pdf'),
'timeout' => env('NEXTPDF_QUEUE_TIMEOUT', 120),
],
];
  • signature.enabled = true avec un signature.certificate vide résout toujours SignerInterface en null ; les deux doivent être définis.
  • tsa.url = null force TsaClient à null, même si d’autres clés tsa.* sont renseignées.
  • signature.level = null retombe sur PAdES B-B au niveau du signataire.
  • image_cache_mb défini à null (et non 0) retombe sur la valeur par défaut de 50 Mo ; 0 désactive explicitement le cache.
  • Les anciennes variables d’environnement TCPDF_* restent prises en charge en lecture, mais elles sont dépréciées ; migre vers NEXTPDF_*.

La lecture de la config correspond à un accès tableau en O(1). preload_fonts échange une analyse unique en O(f) au démarrage du worker contre une latence plus faible à la première requête. Un image_cache_mb plus grand réduit le décodage répété des images au prix d’une mémoire résidente plus élevée pour le processus.

tsa.allow_insecure_http affaiblit la confiance dans l’horodatage et doit rester false en production. Les URL de la TSA ne doivent provenir que d’une configuration de confiance ; si elles sont exposées via une surface d’administration, applique un pare-feu de sortie ou une politique DNS pour limiter les risques de falsification de requête. Voir /integrations/laravel/security-and-operations/.

Aucune norme normative ne régit le format du fichier de configuration ; toutes les clés sont vérifiées par rapport au config/nextpdf.php du package à la révision documentée. La sémantique des niveaux de signature est régie par Premium et hors du périmètre de cette page Core.

Les sections signature et tsa pilotent la signature Premium lorsque nextpdf/premium est installé. Il s’agit d’une capacité Enterprise facultative ; le package Core documenté ici n’a besoin d’aucune modification de code pour l’adopter. Voir https://nextpdf.dev/get-license/?intent=laravel-signing.

  • /integrations/laravel/install/ — publier le fichier de configuration
  • /integrations/laravel/production-usage/ — configuration appliquée dans un contrôleur réel
  • /integrations/laravel/security-and-operations/ — durcir les réglages de la TSA et de la file d’attente
  • /integrations/laravel/boot-and-discovery/ — le binding piloté par chaque clé