modules-communs-php

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.23

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

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
Details
Composer
2026-10-28 10:57:08 +00:00
40
NowwweB
14 KiB
Assets (1)
Versions (68) View all
1.1.23 2026-10-28
1.1.22 2025-01-24
1.1.21 2025-01-22
1.1.20 2025-01-22
1.1.19 2025-01-20