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
Details
Composer
2025-01-24 20:42:09 +00:00
448
NowwweB
14 KiB
Assets (1)
Versions (67) View all
1.1.22 2025-01-24
1.1.21 2025-01-22
1.1.20 2025-01-22
1.1.19 2025-01-20
1.1.18 2025-01-20