nwb/url-to-pdf-client (1.1.23)
Published 2026-10-28 10:57:08 +00:00 by nicolas
Installation
{
"repositories": [{
"type": "composer",
"url": "https://git.nwb.fr/api/packages/modules-communs-php/composer"
}
]
}composer require nwb/url-to-pdf-client:1.1.23About this package
Transformer du html en pdf
url-to-pdf-client
Facilite l'utilisation de l'API url-to-pdf en PHP :
- Transforme les balises issues de TCPDF ou Html2PDF , <page_header>, <page_footer> en
- Répare/construit les chemins vers les fichiers ver l'url accessible fournie par l'utilisateur
- Renvoie le chemin du fichier pdf créé ou un stream contenant le PDF
Installation
Composer
Ajouter les modules communs dans composer.json
{
"repositories": [{
"type": "composer",
"url": "https://git.nwb.fr/api/packages/modules-communs-php/composer"
}
]
}
Lancer la commande
composer require nwb/url-to-pdf-client
Utilisation
// Instancier le module
$htmlToPdf = new UrlToPdf();
// Méthode 1 : Conversion avec sauvegarde des fichiers locaux
$htmlToPdf->getPdfFromHtml(string $htmlContent, string $projectRootPath, string $webPath, string $webPathUrl, ?array $pdfOptions, bool $isTestMode = false): string
// Méthode 2 : Conversion directe du HTML en stream PDF
$pdfStream = $htmlToPdf->getPdfFromHtmlContent(string $htmlContent, array $loadingOptions = [], array $pdfOptions = [], array $authOptions = []): resource
Options disponibles
PDF options
- Attention, certaines options peuvent ne pas fonctionner suivant les mises à jour de Puppetter et du module. Les utiliser en cas de besoin.
- Documentation complète des options : https://pptr.dev/api/puppeteer.pdfoptions
- Les options sont à placer en paramètre de la fonction getPdfFromHtml ou getPdfFromHtmlContent. Si null, par défaut : ['format' => 'a4']
- Options PDF du module (ne font pas partie des options Puppetter) : ['noBreakTableRows' => true] : True par défaut, permet de ne pas couper les lignes d'un tableau au saut de page. ['font' => [ 'size' => 'Xxx', 'style' => 'XXXXX', ... ]] : Options permettant d'affecter des propriétés font basiques sur la balise <html> englobant le html fourni
Authentification options
Options à ajouter si l'accès au site est protégée par une authentification http basique (username/password) -> ['auth' => ['username' => 'xxxx', 'password' => 'xxxx']]
Exemples
// Exemple 1 : Création du PDF avec sauvegarde locale
use Nwb\UrlToPdf\UrlToPdf;
try {
$urlToPdf = new UrlToPdf(isOnDevEnv() ? ['apiUrl' => 'http://htmltopdf:9999'] : []); // ICI : si dev mode, on utilise l'url de l'api portable
// Création du répértoire temporaire
if (!is_dir(DIR_PUBLIC_DATA . '/tmp/pdf')) {
mkdir(DIR_PUBLIC_DATA . '/tmp/pdf', 0777, true);
}
// définition des chemins à passer en paramètres
$projectRootPath = DIR_ROOT_SITE;
$webPath = DIR_PUBLIC_DATA . '/tmp/pdf';
$webPathUrl = (!isOnDevEnv() ? get_url_site() : 'http://php:8080') . '/public-data/tmp/pdf'; // ICI : si dev mode, adresse de conteneur de l'app
// Définitiion des options PDF
$pdfOptions = [
'format' => 'A4',
'landscape' => true, // orientation feuille
'printBackground' => true, // couleur de fond des cellules, false par défaut
'margin' => [
'top' => '7mm',
'right' => '7mm',
'bottom' => '7mm',
'left' => '7mm',
],
'noBreakTableRows' => true,
'font' => [
'size' => '30px',
'family' => 'Arial',
]
];
// Génération du PDF
$pdfPath = $urlToPdf->getPdfFromHtml($htmlContent, $projectRootPath, $webPath, $webPathUrl, $pdfOptions);
// ICI : envoie le PDF au navigateur
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="' . $name . '"');
header('Content-Length: ' . filesize($pdfPath));
readfile($pdfPath);
} catch (\Throwable $th) {
echo $th->getMessage();
}
// Exemple 2 : Création du PDF avec stream direct
try {
$urlToPdf = new UrlToPdf(['apiUrl' => 'http://htmltopdf:9999']);
// Options de chargement
$loadingOptions = [
'waitUntil' => 'networkidle2',
'timeout' => 30000
];
// Options PDF
$pdfOptions = [
'format' => 'A4',
'margin' => [
'top' => '20mm',
'right' => '20mm',
'bottom' => '20mm',
'left' => '20mm'
]
];
// Génération du PDF en stream
$pdfStream = $urlToPdf->getPdfFromHtmlContent(
$htmlContent,
$loadingOptions,
$pdfOptions
);
// Envoi direct au navigateur
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="document.pdf"');
fpassthru($pdfStream);
fclose($pdfStream);
} catch (\Throwable $th) {
echo $th->getMessage();
}
Lancer les test
composer run test
La suite historique ci-dessus utilise des services externes. Pour vérifier cURL sans les contacter, ce test couvre les réponses, erreurs et replis HTTP avec un serveur local uniquement. Les avertissements et dépréciations font échouer le test :
composer run test:curl
Dependencies
Dependencies
| ID | Version |
|---|---|
| ext-curl | * |
| ext-json | * |
| mikey179/vfsstream | ^1.6 |
| php | >=7.1 |
| setasign/fpdf | ^1.8 |
| setasign/fpdi | ^2.5 |
Development Dependencies
| ID | Version |
|---|---|
| phpunit/phpunit | ^10.4 |