PDF ฉบับแรกของคุณ
ภาพรวมโดยย่อ
หัวข้อที่มีชื่อว่า “ภาพรวมโดยย่อ”ในบทแนะนำนี้ คุณจะสร้างไฟล์ PDF สองไฟล์ ไฟล์แรกเขียนข้อความโดยตรงด้วย Application Programming Interface (API) แบบ fluent ของ core จากนั้นเรนเดอร์ Hypertext Markup Language (HTML) fragment ที่มี Cascading Style Sheets (CSS) ลงบนหน้า เมื่อจบบทนี้ คุณจะมีสคริปต์ที่ใช้งานได้และนำไปปรับใช้กับเอกสารจริงได้ พร้อมลิงก์ไปยังรูปแบบการใช้งานสำหรับเฟรมเวิร์กและเซิร์ฟเวอร์
ทั้งสองแนวทางทำงานบนเอนจินเดียวกัน ดังนั้นสิ่งที่เรียนรู้ในบทนี้จึงนำไปใช้ได้กับการแจกจ่ายทุกแบบ
แผนภาพด้านล่างแสดงแนวทางการสร้างเอกสารสองแบบ และพื้นที่ใช้งานสามแบบที่นำแนวทางเหล่านั้นมาใช้ซ้ำ
ก่อนเริ่มต้น
หัวข้อที่มีชื่อว่า “ก่อนเริ่มต้น”ต้องติดตั้งเอนจิน core ไว้แล้ว และมีสภาพแวดล้อมสำหรับรันสคริปต์ PHP
-
ตรวจสอบว่า PHP 8.4 เป็นรันไทม์ที่ใช้งานอยู่:
Terminal window php --version -
ติดตั้งเอนจิน core ในโปรเจกต์ของคุณ หากยังไม่ได้ติดตั้ง:
Terminal window composer require nextpdf/core -
สร้างไฟล์สำหรับทำงานชื่อ
first-pdf.phpที่รากของโปรเจกต์
สร้าง PDF จาก PHP
หัวข้อที่มีชื่อว่า “สร้าง PDF จาก PHP”เริ่มต้นด้วย API แบบ fluent Document::createStandalone() คืนค่าเอกสารที่ใช้งานได้ทันที เพิ่มหน้า กำหนดฟอนต์ เขียนเซลล์ แล้วบันทึก เมธอดสร้างเอกสารแต่ละเมธอดจะคืนค่าเอกสารกลับมา จึงอ่านลำดับการเรียกใช้จากบนลงล่างได้
-
วางโค้ดนี้ใน
first-pdf.phpสคริปต์นี้ประกาศ strict types โหลด autoloader และสร้างหน้าเดียว:<?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 -
ตรวจสอบผลลัพธ์ คุณควรเห็นบรรทัดนี้ใน standard output และไฟล์ใหม่ชื่อ
first-pdf.pdfอยู่ในตำแหน่งเดียวกับสคริปต์:Wrote first-pdf.pdf
ตอนนี้คุณได้สร้างไฟล์ PDF 2.0 ที่ถูกต้องแล้ว เปิดไฟล์ในโปรแกรมดู PDF ใดก็ได้เพื่อดูหัวเรื่องและบรรทัดที่อยู่ด้านล่าง
เรนเดอร์ HTML ไปยัง PDF
หัวข้อที่มีชื่อว่า “เรนเดอร์ HTML ไปยัง PDF”การเขียนเซลล์ช่วยให้ควบคุมได้อย่างแม่นยำ แต่เอกสารส่วนใหญ่มักเขียนในรูปแบบ HTML และ CSS ได้เร็วกว่า เอนจิน core มี HTML pipeline แบบ pure-PHP รวมอยู่ด้วย เมธอด writeHtml() ของเอนจินจะเรนเดอร์ fragment ลงบนหน้าปัจจุบัน เมธอดนี้ไม่ใช้เบราว์เซอร์หรือบริการภายนอก
-
สร้างไฟล์ที่สอง
html-pdf.phpที่เรนเดอร์ HTML fragment:<?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 หรือ 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'); }}bundle เปิดเผยบริการ PdfFactory ให้ทำ type-hint NextPDF\Symfony\Service\PdfFactory ในคอนโทรลเลอร์ สร้างเอกสารด้วยวิธีเดียวกัน แล้วคืนค่าเป็นการตอบกลับ HTTP ดู คู่มือเริ่มต้นใช้งานด่วนของ Symfony ได้
เมื่อ NextPDF Server ทำงานอยู่ ให้ POST อาร์เรย์ operations ตามลำดับ แล้วเซิร์ฟเวอร์จะคืนค่าไบต์ 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 ด้วยสามวิธีแล้ว ใช้หน้าต่อไปนี้เพื่อต่อยอดในแต่ละวิธี