nwb/url-to-pdf-client (1.1.22)
Published 2025-01-24 20:42:09 +00:00 by drone_publisher
Installation
{
"repositories": [{
"type": "composer",
"url": " "
}
]
}
composer require nwb/url-to-pdf-client:1.1.22
About 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
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 |