첫 번째 PDF
한눈에 보기
섹션 제목: “한눈에 보기”이 튜토리얼에서는 두 개의 PDF 파일을 생성합니다. 첫 번째 파일에서는 플루언트 코어 API로 텍스트를 직접 작성합니다. 두 번째 파일에서는 HyperText Markup Language(HTML)와 Cascading Style Sheets(CSS) 조각을 페이지에 렌더링합니다. 끝까지 따라 하면 실제 문서에 맞게 응용할 수 있는 실행 가능한 스크립트가 준비됩니다. 또한 프레임워크 및 서버 변형을 어디에서 찾을 수 있는지도 알게 됩니다.
두 방식 모두 동일한 엔진에서 실행됩니다. 따라서 여기서 배운 내용은 모든 배포판에 그대로 적용할 수 있습니다.
아래 다이어그램은 두 가지 작성 방식과 이를 재사용하는 세 가지 배포 영역을 보여 줍니다.
시작하기 전에
섹션 제목: “시작하기 전에”두 가지가 필요합니다. 설치된 코어 엔진, 그리고 PHP 스크립트를 실행할 수 있는 환경입니다.
-
PHP 8.4가 활성 런타임인지 확인합니다.
Terminal window php --version -
코어 엔진이 아직 설치되어 있지 않다면 프로젝트에 설치합니다.
Terminal window composer require nextpdf/core -
프로젝트 루트에
first-pdf.php라는 작업 파일을 만듭니다.
PHP에서 PDF 생성하기
섹션 제목: “PHP에서 PDF 생성하기”플루언트 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"; -
스크립트를 실행합니다.
Terminal window php first-pdf.php -
출력을 확인합니다. 표준 출력에 다음 줄이 표시되고, 스크립트와 같은 디렉터리에
first-pdf.pdf라는 새 파일이 생성되어야 합니다.Wrote first-pdf.pdf
이제 유효한 PDF 2.0 파일을 생성했습니다. 어떤 뷰어에서든 열면 제목과 그 아래 줄이 보입니다.
HTML을 PDF로 렌더링하기
섹션 제목: “HTML을 PDF로 렌더링하기”셀을 작성하면 정밀하게 제어할 수 있습니다. 하지만 대부분의 문서는 HTML과 CSS로 표현하는 편이 더 빠릅니다. 코어 엔진에는 순수 PHP HTML 파이프라인이 포함되어 있습니다. 이 파이프라인의 writeHtml() 메서드는 조각을 현재 페이지에 렌더링합니다. 브라우저나 외부 서비스를 사용하지 않습니다.
-
HTML 조각을 렌더링하는 두 번째 파일
html-pdf.php를 만듭니다.<?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"; -
실행합니다.
Terminal window php html-pdf.php -
출력 줄과 새 파일을 확인합니다.
Wrote html-pdf.pdf
엔진은 HTML과 CSS의 지원되는 하위 집합을 렌더링합니다. 속성에 의존하기 전에 CSS 지원 매트릭스와 대조하여 확인해야 합니다. 레이아웃에 브라우저 수준의 완전한 충실도가 필요한 경우(예: flexbox, grid 또는 웹 글꼴) Artisan 렌더러를 설치하고 대신 writeHtmlChrome()를 호출해야 합니다. 이 메서드는 텍스트를 선택 가능한 상태로 유지합니다.
프레임워크 컨트롤러에서
섹션 제목: “프레임워크 컨트롤러에서”애플리케이션이 이미 프레임워크 위에서 실행 중이거나 서버로 동작하고 있을 수 있습니다. 동일한 두 호출을 해당 환경으로 옮겨 사용할 수 있습니다. 엔진은 그대로이고 연결 방식만 바뀝니다.
Laravel의 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'); }}자세한 내용은 Laravel 빠른 시작에서 확인할 수 있습니다.
이 번들은 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를 생성했습니다. 각 방법에서 다음으로 이어서 볼 내용은 다음과 같습니다.