콘텐츠로 이동

첫 번째 PDF

이 튜토리얼에서는 두 개의 PDF 파일을 생성합니다. 첫 번째 파일에서는 플루언트 코어 API로 텍스트를 직접 작성합니다. 두 번째 파일에서는 HyperText Markup Language(HTML)와 Cascading Style Sheets(CSS) 조각을 페이지에 렌더링합니다. 끝까지 따라 하면 실제 문서에 맞게 응용할 수 있는 실행 가능한 스크립트가 준비됩니다. 또한 프레임워크 및 서버 변형을 어디에서 찾을 수 있는지도 알게 됩니다.

두 방식 모두 동일한 엔진에서 실행됩니다. 따라서 여기서 배운 내용은 모든 배포판에 그대로 적용할 수 있습니다.

아래 다이어그램은 두 가지 작성 방식과 이를 재사용하는 세 가지 배포 영역을 보여 줍니다.

From your code to a PDF fileTwo authoring approaches feed one engine, which produces a PDF that you can save, stream, or return from a framework or server.

Authoring

Fluent API

setFont() + cell()

HTML fragment

writeHtml()

Document

Core engine

(pure PHP)

PDF 2.0 bytes

save() to disk

output() / getPdfData()

stream or in memory

Framework response

or server REST reply

From your code to a PDF file

두 가지가 필요합니다. 설치된 코어 엔진, 그리고 PHP 스크립트를 실행할 수 있는 환경입니다.

  1. PHP 8.4가 활성 런타임인지 확인합니다.

    Terminal window
    php --version
  2. 코어 엔진이 아직 설치되어 있지 않다면 프로젝트에 설치합니다.

    Terminal window
    composer require nextpdf/core
  3. 프로젝트 루트에 first-pdf.php라는 작업 파일을 만듭니다.

플루언트 API부터 시작합니다. Document::createStandalone()은 바로 사용할 수 있는 문서를 반환합니다. 페이지를 추가하고, 글꼴을 설정하고, 셀을 작성한 다음 저장합니다. 각 작성 메서드는 문서를 반환하므로 호출 흐름을 위에서 아래로 읽을 수 있습니다.

  1. 이 코드를 first-pdf.php에 넣습니다. 이 스크립트는 엄격한 타입을 선언하고, 오토로더를 로드한 다음, 한 페이지짜리 문서를 만듭니다.

    <?php
    declare(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";
  2. 스크립트를 실행합니다.

    Terminal window
    php first-pdf.php
  3. 출력을 확인합니다. 표준 출력에 다음 줄이 표시되고, 스크립트와 같은 디렉터리에 first-pdf.pdf라는 새 파일이 생성되어야 합니다.

    Wrote first-pdf.pdf

이제 유효한 PDF 2.0 파일을 생성했습니다. 어떤 뷰어에서든 열면 제목과 그 아래 줄이 보입니다.

셀을 작성하면 정밀하게 제어할 수 있습니다. 하지만 대부분의 문서는 HTML과 CSS로 표현하는 편이 더 빠릅니다. 코어 엔진에는 순수 PHP HTML 파이프라인이 포함되어 있습니다. 이 파이프라인의 writeHtml() 메서드는 조각을 현재 페이지에 렌더링합니다. 브라우저나 외부 서비스를 사용하지 않습니다.

  1. HTML 조각을 렌더링하는 두 번째 파일 html-pdf.php를 만듭니다.

    <?php
    declare(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";
  2. 실행합니다.

    Terminal window
    php html-pdf.php
  3. 출력 줄과 새 파일을 확인합니다.

    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 빠른 시작에서 확인할 수 있습니다.

이제 세 가지 방법으로 PDF를 생성했습니다. 각 방법에서 다음으로 이어서 볼 내용은 다음과 같습니다.