Tu primer PDF
De un vistazo
Sección titulada «De un vistazo»En este tutorial se generan dos archivos PDF. Para el primero, se escribe texto directamente con la API fluida del core. Para el segundo, se renderiza un fragmento de HTML y CSS en una página. Al final, queda un script funcional que se puede adaptar a un documento real. También se verá dónde están las variantes de framework y la variante de servidor.
Ambos enfoques se ejecutan sobre el mismo motor. Por eso, lo aprendido aquí se traslada a cada distribución.
El siguiente diagrama muestra los dos enfoques de autoría y las tres superficies de despliegue que los reutilizan.
Antes de empezar
Sección titulada «Antes de empezar»Se necesitan dos cosas: el motor del core instalado y un lugar donde ejecutar un script PHP.
-
Confirmar que PHP 8.4 es el runtime activo:
Ventana de terminal php --version -
Instalar el motor del core en el proyecto, si todavía no está presente:
Ventana de terminal composer require nextpdf/core -
Crear un archivo de trabajo llamado
first-pdf.phpen la raíz del proyecto.
Generar un PDF desde PHP
Sección titulada «Generar un PDF desde PHP»Se empieza con la API fluida. Document::createStandalone() devuelve un documento listo para usar. Se agrega una página, se define una fuente, se escriben celdas y luego se guarda. Cada método de autoría devuelve el documento, así que las llamadas se leen de arriba abajo.
-
Poner este código en
first-pdf.php. El script declara tipos estrictos, carga el autoloader y construye un documento de una página:<?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"; -
Ejecutar el script:
Ventana de terminal php first-pdf.php -
Confirmar la salida. Debería aparecer esta línea en la salida estándar y un archivo nuevo llamado
first-pdf.pdfjunto al script:Wrote first-pdf.pdf
Con esto, se genera un archivo PDF 2.0 válido. Al abrirlo en cualquier visor, se ve el encabezado con la línea debajo.
Renderizar HTML a PDF
Sección titulada «Renderizar HTML a PDF»Escribir celdas ofrece un control preciso. Sin embargo, la mayoría de los documentos se expresan más rápido como HTML y CSS. El motor del core incluye un pipeline de HTML en PHP puro. Su método writeHtml() renderiza un fragmento en la página actual. No usa ningún navegador ni ningún servicio externo.
-
Crear un segundo archivo,
html-pdf.php, que renderiza un fragmento de 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"; -
Ejecutarlo:
Ventana de terminal php html-pdf.php -
Confirmar la línea de salida y el archivo nuevo:
Wrote html-pdf.pdf
El motor renderiza un subconjunto compatible de HTML y CSS. Antes de depender de una propiedad, conviene verificarla en la matriz de compatibilidad de CSS. Cuando un diseño necesita la fidelidad completa de un navegador (por ejemplo flexbox, grid o fuentes web), se instala el renderer de Artisan y se llama a writeHtmlChrome() en su lugar. Ese método conserva el texto seleccionable.
Desde un controlador de framework
Sección titulada «Desde un controlador de framework»La aplicación quizá ya se ejecute sobre un framework o como servidor. Las mismas dos llamadas se trasladan a ese entorno. El motor sigue siendo idéntico; solo cambia el cableado.
La fachada Pdf resuelve un documento nuevo en cada llamada. PdfResponse convierte un documento en una respuesta de descarga:
<?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'); }}Consultar el inicio rápido de Laravel.
El bundle expone un servicio PdfFactory. Indicar el tipo NextPDF\Symfony\Service\PdfFactory en un controlador, construir un documento de la misma manera y luego devolverlo como una respuesta HTTP. Consultar el inicio rápido de Symfony.
Con NextPDF Server en ejecución, se envía un POST con un arreglo ordenado de operaciones y el servidor devuelve los bytes 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.pdfEn una respuesta 200, el cuerpo contiene el PDF. Consultar el inicio rápido de Connect.
Próximos pasos
Sección titulada «Próximos pasos»Ya se ha generado un PDF de tres maneras. Estos son los siguientes pasos para cada enfoque.