コンテンツにスキップ

最初の PDF

このチュートリアルでは、2 つの PDF ファイルを生成します。1 つ目では、流れるように記述できるコアの Application Programming Interface(API)を使い、テキストを直接書き込みます。2 つ目では、HyperText Markup Language(HTML)と Cascading Style Sheets(CSS)のフラグメントをページにレンダリングします。最後には、実際のドキュメントに合わせて応用できる、動作するスクリプトが手に入ります。また、フレームワーク版とサーバー版の参照先も確認できます。

どちらの方法も、同じエンジン上で動作します。そのため、ここで学ぶ内容は、すべてのディストリビューションにそのまま引き継がれます。

次の図は、2 つのオーサリング方法と、それらを再利用する 3 つのデプロイ先を示しています。

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

必要なものは 2 つです。インストール済みのコアエンジンと、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 に記述します。このスクリプトは strict types を宣言し、オートローダーを読み込んで、1 ページのドキュメントを構築します。

    <?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 フラグメントをレンダリングする 2 つ目のファイルとして、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、Web フォントなど)は、Artisan レンダラー をインストールし、代わりに writeHtmlChrome() を呼び出します。このメソッドでは、テキストは選択可能な状態に保たれます。

アプリケーションがすでにフレームワーク上で、またはサーバーとして動作している場合もあります。先ほどと同じ 2 つの呼び出しは、その環境にそのまま移せます。エンジンはまったく同じで、変わるのは接続部分だけです。

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 クイックスタート を参照してください。

これで、3 通りの方法で PDF を生成しました。ここでは、それぞれの方法から次に進む先を紹介します。