Ваш первый PDF
Краткий обзор
Заголовок раздела «Краткий обзор»В этом руководстве вы создадите два файла PDF. Сначала вы добавите текст напрямую с помощью гибкого API ядра. Затем отрисуете на странице фрагмент HTML с CSS. В итоге у вас будет рабочий скрипт, который можно адаптировать для реального документа, а также ссылки на варианты для фреймворков и сервера.
Оба подхода используют один и тот же движок, поэтому полученные здесь знания применимы к любой версии.
На схеме ниже показаны два подхода к созданию документов и три среды развёртывания, где они применяются.
Перед началом работы
Заголовок раздела «Перед началом работы»Вам понадобится установленный движок ядра и среда для запуска скрипта PHP.
-
Убедитесь, что активная среда выполнения — PHP 8.4:
Окно терминала php --version -
Установите движок ядра в проект, если он ещё не установлен:
Окно терминала composer require nextpdf/core -
Создайте рабочий файл с именем
first-pdf.phpв корне проекта.
Создание PDF из PHP
Заголовок раздела «Создание PDF из PHP»Начните с гибкого API. Document::createStandalone() возвращает документ, который сразу готов к работе. Добавьте страницу, задайте шрифт, запишите ячейки, а затем сохраните файл. Каждый метод создания возвращает документ, поэтому цепочка вызовов читается сверху вниз.
-
Поместите этот код в
first-pdf.php. Скрипт объявляет строгую типизацию, загружает автозагрузчик и создаёт одну страницу:<?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"; -
Запустите скрипт:
Окно терминала php first-pdf.php -
Проверьте результат. В стандартном выводе должна появиться эта строка, а рядом со скриптом — новый файл с именем
first-pdf.pdf:Wrote first-pdf.pdf
Теперь вы создали корректный файл PDF 2.0. Откройте его в любой программе просмотра, чтобы увидеть заголовок и строку под ним.
Отрисовка HTML в PDF
Заголовок раздела «Отрисовка HTML в PDF»Запись ячеек даёт точный контроль. Однако большинство документов быстрее описать с помощью HTML и CSS. Движок ядра включает конвейер обработки HTML на чистом PHP. Метод writeHtml() отрисовывает фрагмент на текущей странице. Он не использует браузер или внешнюю службу.
-
Создайте второй файл,
html-pdf.php, который отрисовывает 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"; -
Запустите его:
Окно терминала php html-pdf.php -
Проверьте строку вывода и новый файл:
Wrote html-pdf.pdf
Движок отрисовывает поддерживаемое подмножество HTML и CSS. Прежде чем полагаться на какое-либо свойство, проверьте матрицу поддержки CSS. Если макету требуется полное соответствие браузеру, например flexbox, grid или веб-шрифты, установите средство отрисовки Artisan и вместо этого вызовите writeHtmlChrome(). Этот метод сохраняет возможность выделять текст.
Из контроллера фреймворка
Заголовок раздела «Из контроллера фреймворка»Возможно, ваше приложение уже работает во фреймворке или через сервер. Те же два вызова можно перенести в эту среду. Движок остаётся прежним. Меняется только способ подключения.
Фасад Pdf при каждом вызове создаёт новый документ. PdfResponse преобразует документ в ответ для скачивания:
<?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'); }}Пакет предоставляет службу PdfFactory. Укажите тип NextPDF\Symfony\Service\PdfFactory в контроллере, создайте документ тем же способом и верните его как HTTP-ответ. См. быстрый старт для Symfony.
Когда NextPDF Server запущен, отправьте методом POST упорядоченный массив операций, и сервер вернёт байты 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.pdfПри ответе 200 тело ответа содержит PDF. См. быстрый старт для Connect.
Дальнейшие действия
Заголовок раздела «Дальнейшие действия»Теперь вы создали PDF тремя способами. Эти страницы помогут развить каждый из них.