Il primo PDF
In breve
Sezione intitolata “In breve”In questo tutorial si generano due file PDF. Nel primo si scrive il testo direttamente con l’Application Programming Interface (API) fluente del core. Nel secondo si esegue il rendering in pagina di un frammento di HyperText Markup Language (HTML) e Cascading Style Sheets (CSS). Al termine si dispone di uno script funzionante, adattabile a un documento reale, e si saprà dove trovare le varianti per framework e quella server.
Entrambi gli approcci si basano sullo stesso motore. Pertanto quanto appreso qui vale per ogni distribuzione.
Il diagramma seguente mostra i due approcci di creazione e le tre superfici di distribuzione che li riutilizzano.
Prima di iniziare
Sezione intitolata “Prima di iniziare”Servono due elementi: il motore del core installato e un ambiente in cui eseguire uno script PHP.
-
Verificare che PHP 8.4 sia il runtime attivo:
Terminal window php --version -
Installare il motore del core nel progetto, se non è già presente:
Terminal window composer require nextpdf/core -
Creare un file di lavoro denominato
first-pdf.phpnella radice del progetto.
Generare un PDF da PHP
Sezione intitolata “Generare un PDF da PHP”Iniziare dall’API fluente. Document::createStandalone() restituisce un documento pronto all’uso. Si aggiunge una pagina, si imposta un font, si scrivono le celle e quindi si salva. Ogni metodo di creazione restituisce il documento, quindi la sequenza di chiamate si legge dall’alto verso il basso.
-
Inserire questo codice in
first-pdf.php. Lo script abilita la tipizzazione strict, carica l’autoloader e crea un documento di una pagina:<?phpdeclare(strict_types=1);require_once __DIR__ . '/vendor/autoload.php';use NextPDF\Core\Document;$document = Document::createStandalone();$document->setTitle('My first NextPDF document');$document->addPage();$document->setFont('helvetica', 'B', 24);$document->cell(0, 15, 'Hello, NextPDF!', newLine: true);$document->setFont('helvetica', '', 12);$document->cell(0, 10, 'This is the first PDF I generated with PHP.', newLine: true);$document->save(__DIR__ . '/first-pdf.pdf');echo "Wrote first-pdf.pdf\n"; -
Eseguire lo script:
Terminal window php first-pdf.php -
Verificare l’output. Nell’output standard dovrebbe comparire questa riga e, accanto allo script, dovrebbe essere creato un nuovo file denominato
first-pdf.pdf:Wrote first-pdf.pdf
A questo punto è stato generato un file PDF 2.0 valido. Aprendolo in un visualizzatore qualsiasi, si vedono il titolo e la riga sottostante.
Eseguire il rendering di HTML in PDF
Sezione intitolata “Eseguire il rendering di HTML in PDF”La scrittura delle celle offre un controllo preciso. Tuttavia, la maggior parte dei documenti si definisce più rapidamente in HTML e CSS. Il motore del core include una pipeline HTML in puro PHP. Il metodo writeHtml() esegue il rendering di un frammento nella pagina corrente. Non usa alcun browser né alcun servizio esterno.
-
Creare un secondo file,
html-pdf.php, che esegue il rendering di un frammento HTML:<?phpdeclare(strict_types=1);require_once __DIR__ . '/vendor/autoload.php';use NextPDF\Core\Document;$document = Document::createStandalone();$document->setTitle('HTML to PDF');$document->addPage();$html = <<<'HTML'<h1 style="color: #1E3A8A;">HTML rendering in NextPDF</h1><p>NextPDF renders <strong>HTML content</strong> directly into PDF pages.</p><ul><li>Headings, paragraphs, and lists</li><li>Inline <strong>bold</strong> and <em>italic</em></li><li>Inline styles such as color and font-size</li></ul>HTML;$document->writeHtml($html);$document->save(__DIR__ . '/html-pdf.pdf');echo "Wrote html-pdf.pdf\n"; -
Eseguirlo:
Terminal window php html-pdf.php -
Verificare la riga di output e il nuovo file:
Wrote html-pdf.pdf
Il motore esegue il rendering di un sottoinsieme supportato di HTML e CSS. Prima di fare affidamento su una proprietà, verificarla nella matrice di supporto CSS. Quando un layout richiede la piena fedeltà di un browser, ad esempio per flexbox, grid o web font, installare l’Artisan renderer e chiamare invece writeHtmlChrome(). Questo metodo mantiene il testo selezionabile.
Da un controller di un framework
Sezione intitolata “Da un controller di un framework”L’applicazione può già basarsi su un framework o fungere da server. Le stesse due chiamate si possono trasferire in quell’ambiente. Il motore resta identico; cambia solo il cablaggio.
La facade Pdf risolve un nuovo documento a ogni chiamata. PdfResponse converte un documento in una risposta di download:
<?php
declare(strict_types=1);
namespace App\Http\Controllers;
use Illuminate\Http\Response;use NextPDF\Contracts\PdfDocumentInterface;use NextPDF\Laravel\Http\PdfResponse;
final class ReportController extends Controller{ public function download(): Response { $document = app(PdfDocumentInterface::class); $document->addPage(); $document->cell(0, 10, 'Monthly report', newLine: true);
return PdfResponse::download($document, 'report.pdf'); }}Consultare la guida rapida di Laravel.
Il bundle espone un servizio PdfFactory. Usare il type-hint NextPDF\Symfony\Service\PdfFactory in un controller, creare un documento nello stesso modo e restituirlo come risposta HTTP. Consultare la guida rapida di Symfony.
Con NextPDF Server in esecuzione, inviare tramite POST un array ordinato di operazioni; il server restituisce i byte del PDF:
curl -sS -X POST http://localhost:8080/api/v1/render \ -H 'Authorization: Bearer <api-key>' \ -H 'Content-Type: application/json' \ -d '{ "page_size": "A4", "orientation": "portrait", "operations": [ { "type": "add_text", "text": "Hello from NextPDF Connect" } ] }' \ --output hello.pdfCon una risposta 200, il corpo contiene il PDF. Consultare la guida rapida di Connect.
Passaggi successivi
Sezione intitolata “Passaggi successivi”A questo punto è stato generato un PDF in tre modi. Ecco come proseguire da ciascun percorso.