PDF đầu tiên của bạn
Tổng quan nhanh
Phần tiêu đề “Tổng quan nhanh”Trong hướng dẫn này, bạn sẽ tạo hai tệp PDF. Trước tiên, bạn viết văn bản trực tiếp bằng core Application Programming Interface (API) dạng fluent. Sau đó, bạn kết xuất một đoạn Hypertext Markup Language (HTML) có Cascading Style Sheets (CSS) thành một trang. Khi hoàn tất, bạn sẽ có một script chạy được để điều chỉnh cho tài liệu thực tế, cùng các liên kết đến các biến thể framework và server.
Cả hai cách tiếp cận đều chạy trên cùng một engine, nên những gì bạn học ở đây áp dụng cho mọi bản phân phối.
Sơ đồ bên dưới cho thấy hai cách tạo nội dung và ba bề mặt triển khai có thể dùng lại chúng.
Trước khi bắt đầu
Phần tiêu đề “Trước khi bắt đầu”Bạn cần cài đặt core engine và có môi trường để chạy script PHP.
-
Xác nhận PHP 8.4 là runtime hiện đang hoạt động:
Terminal window php --version -
Cài đặt core engine vào dự án của bạn, nếu chưa có sẵn:
Terminal window composer require nextpdf/core -
Tạo một tệp làm việc có tên
first-pdf.phptrong thư mục gốc của dự án.
Tạo PDF từ PHP
Phần tiêu đề “Tạo PDF từ PHP”Bắt đầu với fluent API. Document::createStandalone() trả về một tài liệu có thể dùng ngay. Thêm một trang, đặt phông chữ, viết các cell, rồi lưu. Mỗi phương thức tạo nội dung đều trả về tài liệu, nên chuỗi lệnh gọi có thể đọc từ trên xuống dưới.
-
Đưa đoạn code này vào
first-pdf.php. Script khai báo strict types, nạp autoloader và dựng một trang:<?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"; -
Chạy script:
Terminal window php first-pdf.php -
Kiểm tra kết quả đầu ra. Bạn sẽ thấy dòng này trên standard output và một tệp mới có tên
first-pdf.pdfnằm cạnh script:Wrote first-pdf.pdf
Bây giờ bạn đã tạo được một tệp PDF 2.0 hợp lệ. Mở tệp đó trong bất kỳ trình xem PDF nào để thấy tiêu đề và dòng bên dưới.
Kết xuất HTML thành PDF
Phần tiêu đề “Kết xuất HTML thành PDF”Viết các cell cho bạn khả năng kiểm soát chính xác. Tuy nhiên, với hầu hết tài liệu, diễn đạt bằng HTML và CSS sẽ nhanh hơn. Core engine bao gồm một pipeline HTML thuần PHP. Phương thức writeHtml() kết xuất một đoạn vào trang hiện tại. Nó không dùng trình duyệt hay dịch vụ bên ngoài.
-
Tạo một tệp thứ hai,
html-pdf.php, để kết xuất một đoạn HTML:<?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"; -
Chạy tệp đó:
Terminal window php html-pdf.php -
Kiểm tra dòng kết quả và tệp mới:
Wrote html-pdf.pdf
Engine kết xuất tập con HTML và CSS được hỗ trợ. Trước khi dựa vào một thuộc tính, hãy kiểm tra ma trận hỗ trợ CSS. Khi bố cục cần độ trung thực đầy đủ của trình duyệt, chẳng hạn flexbox, grid hoặc web font, hãy cài đặt Artisan renderer và gọi writeHtmlChrome() thay thế. Phương thức đó giữ cho văn bản vẫn chọn được.
Từ một controller của framework
Phần tiêu đề “Từ một controller của framework”Ứng dụng của bạn có thể đã chạy trong một framework hoặc thông qua server. Hai lệnh gọi đó vẫn được đưa vào môi trường ấy. Engine không đổi. Chỉ phần kết nối thay đổi.
Facade Pdf phân giải một tài liệu mới cho mỗi lệnh gọi. PdfResponse chuyển tài liệu thành phản hồi tải xuống:
<?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 cung cấp một service PdfFactory. Khai báo type-hint NextPDF\Symfony\Service\PdfFactory trong một controller, dựng tài liệu theo cùng cách, rồi trả về dưới dạng phản hồi HTTP. Xem hướng dẫn khởi động nhanh Symfony.
Khi NextPDF Server đang chạy, hãy POST một mảng operations có thứ tự; server sẽ trả về các byte 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.pdfKhi nhận phản hồi 200, phần thân chính là PDF. Xem hướng dẫn khởi động nhanh Connect.
Bước tiếp theo
Phần tiêu đề “Bước tiếp theo”Bây giờ bạn đã tạo được PDF theo ba cách. Hãy dùng các trang này để tiếp tục xây dựng trên từng cách.