ข้ามไปยังเนื้อหา

PDF ฉบับแรกของคุณ

ในบทแนะนำนี้ คุณจะสร้างไฟล์ PDF สองไฟล์ ไฟล์แรกเขียนข้อความโดยตรงด้วย Application Programming Interface (API) แบบ fluent ของ core จากนั้นเรนเดอร์ Hypertext Markup Language (HTML) fragment ที่มี 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

ต้องติดตั้งเอนจิน core ไว้แล้ว และมีสภาพแวดล้อมสำหรับรันสคริปต์ PHP

  1. ตรวจสอบว่า PHP 8.4 เป็นรันไทม์ที่ใช้งานอยู่:

    Terminal window
    php --version
  2. ติดตั้งเอนจิน core ในโปรเจกต์ของคุณ หากยังไม่ได้ติดตั้ง:

    Terminal window
    composer require nextpdf/core
  3. สร้างไฟล์สำหรับทำงานชื่อ first-pdf.php ที่รากของโปรเจกต์

เริ่มต้นด้วย API แบบ fluent Document::createStandalone() คืนค่าเอกสารที่ใช้งานได้ทันที เพิ่มหน้า กำหนดฟอนต์ เขียนเซลล์ แล้วบันทึก เมธอดสร้างเอกสารแต่ละเมธอดจะคืนค่าเอกสารกลับมา จึงอ่านลำดับการเรียกใช้จากบนลงล่างได้

  1. วางโค้ดนี้ใน first-pdf.php สคริปต์นี้ประกาศ strict types โหลด autoloader และสร้างหน้าเดียว:

    <?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. ตรวจสอบผลลัพธ์ คุณควรเห็นบรรทัดนี้ใน standard output และไฟล์ใหม่ชื่อ first-pdf.pdf อยู่ในตำแหน่งเดียวกับสคริปต์:

    Wrote first-pdf.pdf

ตอนนี้คุณได้สร้างไฟล์ PDF 2.0 ที่ถูกต้องแล้ว เปิดไฟล์ในโปรแกรมดู PDF ใดก็ได้เพื่อดูหัวเรื่องและบรรทัดที่อยู่ด้านล่าง

การเขียนเซลล์ช่วยให้ควบคุมได้อย่างแม่นยำ แต่เอกสารส่วนใหญ่มักเขียนในรูปแบบ HTML และ CSS ได้เร็วกว่า เอนจิน core มี HTML pipeline แบบ pure-PHP รวมอยู่ด้วย เมธอด writeHtml() ของเอนจินจะเรนเดอร์ fragment ลงบนหน้าปัจจุบัน เมธอดนี้ไม่ใช้เบราว์เซอร์หรือบริการภายนอก

  1. สร้างไฟล์ที่สอง html-pdf.php ที่เรนเดอร์ HTML fragment:

    <?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 fonts ให้ติดตั้ง ตัวเรนเดอร์ Artisan และเรียก writeHtmlChrome() แทน เมธอดนั้นยังทำให้เลือกข้อความได้

แอปพลิเคชันของคุณอาจทำงานอยู่บนเฟรมเวิร์กหรือผ่านเซิร์ฟเวอร์อยู่แล้ว การเรียกใช้สองแบบเดิมสามารถย้ายเข้าไปในสภาพแวดล้อมนั้นได้ เอนจินยังคงเหมือนเดิม มีเพียงส่วนเชื่อมต่อเท่านั้นที่เปลี่ยนไป

facade 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 ด้วยสามวิธีแล้ว ใช้หน้าต่อไปนี้เพื่อต่อยอดในแต่ละวิธี