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

ข้อมูลอ้างอิง API สำหรับ Laravel

แพ็กเกจ nextpdf/laravel เชื่อมต่อ NextPDF core ที่เป็นอิสระจากเฟรมเวิร์กเข้ากับแอปพลิเคชัน Laravel คุณสามารถเรียกใช้จุดเข้าใช้งานสี่จุดได้โดยตรง ได้แก่ facade Pdf สำหรับขั้นตอนการสร้างเอกสารแบบสั้น binding ของคอนเทนเนอร์ PdfDocumentInterface สำหรับสร้างเอกสารผ่าน injection ตัวช่วย PdfResponse สำหรับส่งการตอบสนอง HTTP จากเอกสารที่สร้างเสร็จแล้ว และ queue job GeneratePdfJob สำหรับสร้างเอกสารนอกวงจรคำขอ NextPdfServiceProvider จะลงทะเบียน binding แต่ละรายการ และตัว provider จะถูกค้นพบโดยอัตโนมัติ คุณจึงไม่ต้องตั้งค่าด้วยตนเอง การกำหนดค่าใน config/nextpdf.php ควบคุมค่าเริ่มต้น ฟอนต์ คิว และคุณลักษณะการลงนามกับ time-stamp authority (TSA) ซึ่งเป็นทางเลือก

หากต้องการส่งไฟล์ Portable Document Format (PDF) จากคอนโทรลเลอร์โดยตรง ให้เริ่มจากการสร้างเอกสาร แล้วคืนค่า PdfResponse::download($document, 'file.pdf') ตัวอย่างแรกด้านล่างแสดงกระบวนการนี้

ตัวอย่างโค้ดด้านล่างครอบคลุมกระบวนการสามแบบที่มักเริ่มใช้ก่อน ตัวอย่างแต่ละชิ้นได้รับการตรวจสอบกับซอร์สโค้ดของแพ็กเกจแล้ว และตารางอ้างอิงครบถ้วนรายสัญลักษณ์จะตามมา

คืนค่า PDF ที่ดาวน์โหลดได้จากคอนโทรลเลอร์ นี่คืองานที่พบบ่อยที่สุด:

<?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(PdfDocumentInterface $document): Response
{
$document->addPage();
$document->cell(0, 10, 'Monthly report', newLine: true);
return PdfResponse::download($document, 'report.pdf');
}
}

สิ่งที่ตัวอย่างนี้ทำ: inject เอกสารใหม่ เขียนข้อความหนึ่งบรรทัด และคืนค่าการตอบสนองแบบ attachment พร้อม Content-Type: application/pdf และส่วนหัวด้านความปลอดภัยของ Open Worldwide Application Security Project (OWASP) ใช้ inline() แทน download() เมื่อต้องการแสดงตัวอย่างในเบราว์เซอร์

สร้างและบันทึกด้วย facade Pdf นี่คือวิธีที่สั้นที่สุดสำหรับสคริปต์และกระบวนการขนาดสั้น:

<?php
declare(strict_types=1);
use NextPDF\Laravel\Facades\Pdf;
Pdf::addPage();
Pdf::cell(0, 10, 'Hello from Laravel', newLine: true);
Pdf::save(storage_path('app/hello.pdf'));

สิ่งที่ตัวอย่างนี้ทำ: facade resolve เอกสารใหม่จากคอนเทนเนอร์ เขียนหนึ่งเซลล์ และบันทึก PDF ที่สร้างเสร็จแล้วลงดิสก์

สร้าง PDF นอกเธรดของคำขอด้วย GeneratePdfJob:

<?php
declare(strict_types=1);
use NextPDF\Contracts\PdfDocumentInterface;
use NextPDF\Laravel\Jobs\GeneratePdfJob;
GeneratePdfJob::dispatch(
storage_path('app/reports/january-2026.pdf'),
static fn (PdfDocumentInterface $document): PdfDocumentInterface => $document
->addPage()
->cell(0, 10, 'January report', newLine: true),
);

สิ่งที่ตัวอย่างนี้ทำ: จัดคิวการสร้างเอกสารบน worker โดย closure ของ builder รับเอกสารที่ resolve จากคอนเทนเนอร์และคืนค่าเอกสารนั้น job จะตรวจสอบเส้นทางผลลัพธ์ .pdf ก่อนบันทึก ชื่อคิว ค่าหมดเวลา และการเชื่อมต่อทั้งหมดมาจาก config('nextpdf.queue.*')

facade Pdf ทำหน้าที่เป็น proxy แบบ static ไปยัง core Document ใหม่ ใช้ในกระบวนการคอนโทรลเลอร์ขนาดสั้นเมื่อรูปแบบ static อ่านเข้าใจได้ชัดเจน แต่ละแถวแสดงเมท็อดเอกสารหนึ่งรายการที่ถูก proxy

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าข้อยกเว้นหรือสาเหตุที่ล้มเหลวหมายเหตุ
NextPDF\Laravel\Facades\Pdfไม่มี; accessor ของ facade แบบ static จะ resolve NextPDF\Contracts\PdfDocumentInterfaceLaravel resolve binding ปัจจุบันของคอนเทนเนอร์สำหรับอินเทอร์เฟซเอกสารfluent API ของเอกสาร core ที่อยู่เบื้องหลังbinding ของคอนเทนเนอร์ Laravel จะล้มเหลวหากยังไม่ได้ลงทะเบียน providerใช้สำหรับกระบวนการคอนโทรลเลอร์ขนาดสั้น แนะนำให้ใช้ constructor injection สำหรับเซอร์วิสและ job
Pdf::setTitle(string $title)title: ชื่อเอกสารแทนที่ชื่อที่มีอยู่เดิมstaticข้อผิดพลาดการตรวจสอบความถูกต้องหรือข้อผิดพลาดขณะเขียนของ coreทำหน้าที่ proxy ไปยัง core Document ที่อยู่เบื้องหลัง
Pdf::setAuthor(string $author)author: เมทาดาทาผู้เขียนเอกสารแทนที่ผู้เขียนก่อนหน้าstaticข้อผิดพลาดการตรวจสอบเมทาดาทาของ coreแนะนำให้ใช้ค่าเริ่มต้นที่กำหนดค่าไว้สำหรับเมทาดาทาทั้งแอปพลิเคชัน
Pdf::addPage(?PageSize $size = null, Orientation $orientation = Portrait)size: ขนาดหน้าซึ่งเป็นทางเลือก; orientation: Portrait โดยค่าเริ่มต้นใช้ขนาดหน้าที่กำหนดค่าไว้หรือขนาดหน้าเริ่มต้นเมื่อละ sizestaticข้อผิดพลาดการตรวจสอบหน้าของ coreใช้ PageSize อย่างชัดเจนเมื่อขนาดผลลัพธ์มีความสำคัญ
Pdf::setFont(string $family, string $style = '', float $size = 12.0)ตระกูลฟอนต์ สไตล์ และขนาดเป็นพอยต์ใช้สไตล์ว่างและขนาด 12 ptstaticข้อผิดพลาด font registry หรือการเข้ารหัสโหลดฟอนต์สำหรับการใช้งานจริงล่วงหน้าผ่าน nextpdf.preload_fonts เมื่อความหน่วงมีความสำคัญ
Pdf::cell(float $width, float $height, string $text = '', bool $border = false, bool $newLine = false, Alignment $align = Left)กล่องเซลล์ ข้อความ แฟล็กเส้นขอบ แฟล็กขึ้นบรรทัดใหม่ และการจัดแนวใช้ข้อความว่าง ไม่มีเส้นขอบ ไม่ขึ้นบรรทัดใหม่ และจัดแนวชิดซ้ายstaticข้อผิดพลาดเค้าโครงหรือการเข้ารหัสข้อความใช้สำหรับผลลัพธ์เค้าโครงคงที่อย่างง่าย
Pdf::multiCell(float $width, float $height, string $text, bool $border = false, Alignment $align = Left)ความกว้างเซลล์ ความสูงบรรทัด ข้อความ แฟล็กเส้นขอบ และการจัดแนวไม่มีเส้นขอบและจัดแนวชิดซ้ายstaticข้อผิดพลาดเค้าโครงหรือการเข้ารหัสข้อความใช้เมื่อข้อความควรตัดบรรทัดภายในความกว้างคงที่
Pdf::writeHtml(string $html)html: ส่วนย่อยของ HTMLเรนเดอร์บนหน้าปัจจุบันและสร้างหน้าใหม่เมื่อจำเป็นstaticข้อผิดพลาดการเรนเดอร์ HTML ของ coreใช้นโยบายขนาดอินพุตและทรัพยากรก่อนรับ HTML ที่ไม่น่าเชื่อถือ
Pdf::image(string $file, ?float $x = null, ?float $y = null, ?float $width = null, ?float $height = null)เส้นทางไฟล์และสี่เหลี่ยมระบุตำแหน่งซึ่งเป็นทางเลือกให้เอกสาร core เลือกตำแหน่งปัจจุบันและขนาดจริงเมื่อละพิกัดstaticข้อผิดพลาดการถอดรหัสภาพ เส้นทาง หรือเค้าโครงตรวจสอบนโยบายแหล่งที่มาของภาพก่อนรับเส้นทางที่ผู้ใช้ระบุ
Pdf::output(?string $filename = null, OutputDestination $dest = Inline)filename: ชื่อซึ่งเป็นทางเลือก; dest: ปลายทางผลลัพธ์ส่งออกแบบ inline เมื่อละปลายทางstringข้อผิดพลาดการ serialize ของ coreแนะนำให้ใช้ PdfResponse สำหรับการตอบสนอง HTTP ของ Laravel
Pdf::save(string $path)path: เป้าหมายในระบบไฟล์เขียน PDF ที่สร้างเสร็จแล้วลงดิสก์voidข้อผิดพลาดระบบไฟล์หรือข้อผิดพลาดขณะเขียนของ coreตรวจสอบไดเรกทอรีผลลัพธ์ในโค้ดของแอปพลิเคชัน
Pdf::getPdfData()ไม่มีสร้างไบต์ของ PDF ในหน่วยความจำstringข้อผิดพลาดการ serialize ของ coreใช้เมื่ออ็อบเจ็กต์เฟรมเวิร์กอื่นต้องเป็นเจ้าของเนื้อหาการตอบสนอง

ใช้ตารางนี้เมื่อคุณต้องการ resolve หรือ override รายการในคอนเทนเนอร์โดยตรง เช่น inject DocumentFactoryInterface เข้าไปในเซอร์วิส หรือตรวจสอบว่า provides() เลื่อนรายการใดออกไป

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าข้อยกเว้นหรือสาเหตุที่ล้มเหลวหมายเหตุ
NextPdfServiceProvider::register()ไม่มีผสาน config/nextpdf.php; ลงทะเบียน registry, document factory, document binding, HTTP client, TSA client, signer และ contract ของ e-invoice ซึ่งเป็นทางเลือกvoidข้อผิดพลาดการ resolve คอนเทนเนอร์หรือคลาสทางเลือกเมื่อมีการใช้คุณลักษณะนั้นFontRegistryInterface และ ImageRegistry ถูกใช้ร่วมกัน; เอกสารจะถูกสร้างใหม่เสมอ
NextPdfServiceProvider::boot()ไม่มีตรวจสอบส่วนขยาย PHP ที่จำเป็นและเผยแพร่ nextpdf-config ในโหมดคอนโซลvoidRuntimeException หากส่วนขยายที่จำเป็นไม่พร้อมใช้งานส่วนขยายที่จำเป็นคือ mbstring และ zlib เท่านั้น
NextPdfServiceProvider::provides()ไม่มีรายงาน ID ของเซอร์วิสที่ถูกเลื่อนออกไปarray<string>ไม่คาดว่าจะเกิดขึ้นรวมถึง PdfDocumentInterface, DocumentFactoryInterface, FontRegistryInterface, SignerInterface, TsaClient, ClientInterface และ nextpdf ด้วย
PdfDocumentInterface / nextpdfresolve จากคอนเทนเนอร์ของ Laravelสร้าง Document แบบใช้แล้วทิ้งผ่าน DocumentFactoryInterface จากนั้นใช้ค่าเริ่มต้นที่กำหนดค่าไว้ และใช้การตั้งค่า PDF/A หรือ Artisan ซึ่งเป็นทางเลือกNextPDF\Core\Documentข้อผิดพลาดของส่วนขยายทางเลือกเมื่อกำหนดค่าไว้แต่ไม่พร้อมใช้งานresolve เอกสารใหม่สำหรับแต่ละคำขอหรือแต่ละ job
DocumentFactoryInterfaceresolve จากคอนเทนเนอร์ของ Laravelfactory แบบ singleton ที่ใช้ font registry และ image registry ร่วมกันตลอดอายุของกระบวนการDocumentFactoryInterfaceข้อผิดพลาดการตั้งค่า registryใช้รายการนี้สำหรับ dependency injection อย่างชัดเจน
SignerInterfaceresolve จากคอนเทนเนอร์ของ Laravelคืนค่า null เว้นแต่มีการตั้งค่า nextpdf.signature.enabled และกำหนดค่าเส้นทางใบรับรองไว้`SignerInterfacenull`ข้อผิดพลาดการโหลดใบรับรองหรือการตรวจสอบความถูกต้องระดับลายเซ็น

ใช้ตารางนี้เพื่อค้นหาคีย์ nextpdf.* ที่พบขณะ runtime และถูกอ่านโดย binding ข้อมูลอ้างอิงรายคีย์ฉบับครบถ้วน รวมถึงตัวแปรสภาพแวดล้อมและค่าเริ่มต้น อยู่ที่ /integrations/laravel/configuration/

คีย์ชนิดพฤติกรรมเริ่มต้นหมายเหตุ
nextpdf.fonts_pathstringใช้ฟอนต์จากทรัพยากรของ Laravel เมื่อละไว้ไดเรกทอรีสำหรับฟอนต์ที่กำหนดเองและขั้นตอน warmup
nextpdf.cache_pathstringเส้นทางแคชของแอปพลิเคชันคงสิทธิ์ให้ PHP worker เขียนได้
nextpdf.preload_fontslist<string>รายการว่างwarm ระหว่างการสร้าง registry จากนั้น registry จะถูกล็อก
nextpdf.image_cache_mbintขนาดแคชภาพที่มีขอบเขตจำกัดจำกัดหน่วยความจำแคชภาพตลอดอายุของกระบวนการ
nextpdf.defaults.*arrayผู้สร้าง NextPDF ภาษา en ผู้เขียน และค่าเริ่มต้นของเค้าโครงซึ่งเป็นทางเลือกนำไปใช้กับเอกสารใหม่แต่ละฉบับ
nextpdf.artisan.*arrayปิดใช้งานตัวเรนเดอร์ Chrome เว้นแต่มีการติดตั้งและกำหนดค่าไว้แมปไปยัง ChromeRendererConfig::fromArray() โดยตรง
nextpdf.signature.*arrayปิดใช้งานการลงนามโดยค่าเริ่มต้นใบรับรอง คีย์ส่วนตัว รหัสผ่าน ใบรับรองเพิ่มเติม และระดับลายเซ็น
nextpdf.tsa.*arrayTSA ถูกปิดใช้งานเมื่อ Uniform Resource Locator (URL) ว่างเปล่ารองรับข้อมูลรับรอง ไฟล์ mutual Transport Layer Security (mTLS) ค่าหมดเวลา public-key pin และนโยบาย HTTP
nextpdf.ocsp_cache.*arrayแคช Online Certificate Status Protocol (OCSP) เปิดใช้งานพร้อม TTL ที่กำหนดค่าไว้ใช้โดยกระบวนการตรวจสอบความถูกต้องของลายเซ็นเมื่อพร้อมใช้งาน

ใช้ตารางนี้เมื่อคุณคืนค่าเอกสารที่สร้างเสร็จแล้วผ่าน HTTP และต้องเลือกการแสดงผลแบบ inline การดาวน์โหลดแบบ attachment หรือผลลัพธ์แบบ stream

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าข้อยกเว้นหรือสาเหตุที่ล้มเหลวหมายเหตุ
PdfResponse::inline(Document $document, string $filename = 'document.pdf')document: เอกสารที่สร้างขึ้น; filename: ชื่อไฟล์ใน Content-Dispositionปรับชื่อไฟล์ว่างให้เป็น document.pdf เสมอIlluminate\Http\Responseข้อผิดพลาดการ serialize ของ core หรือการสร้างการตอบสนองตั้งค่าชนิดเนื้อหา PDF และส่วนหัวเชิงป้องกัน
PdfResponse::download(Document $document, string $filename = 'document.pdf')เหมือนกับ inline; disposition เป็น attachmentคืนค่าการตอบสนองสำหรับดาวน์โหลดในเบราว์เซอร์Illuminate\Http\Responseเหมือนกับ inline ทุกประการใช้สำหรับการดาวน์โหลดไฟล์อย่างชัดเจน
PdfResponse::streamInline(Document $document, string $filename = 'document.pdf')เหมือนกับ inline ทุกประการสร้างไบต์ของ PDF แล้วส่งเป็นชิ้นขนาด 64 KBSymfony\Component\HttpFoundation\StreamedResponseเหมือนกับ inline ทุกประการนี่คือผลลัพธ์ HTTP แบบ stream ไม่ใช่การเรนเดอร์แบบ zero-copy
PdfResponse::streamDownload(Document $document, string $filename = 'document.pdf')เหมือนกับ streamInline; disposition เป็น attachmentการตอบสนองแบบ stream สำหรับการดาวน์โหลดStreamedResponseเหมือนกับ streamInline ทุกประการบังคับใช้ขีดจำกัดขนาดอินพุตและเอาต์พุตก่อนการเรนเดอร์

ใช้ตารางนี้เมื่อคุณย้ายการสร้างเอกสารออกจากเธรดคำขอ ครอบคลุมการสร้างอ็อบเจ็กต์ การ dispatch และ callback เมื่อสำเร็จหรือล้มเหลวสำหรับ GeneratePdfJob โดยเฉพาะ

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าข้อยกเว้นหรือสาเหตุที่ล้มเหลวหมายเหตุ
new GeneratePdfJob(string $outputPath, callable $builder, ?callable $onSuccess = null, ?callable $onFailure = null)outputPath: เป้าหมาย .pdf; builder: รับ PdfDocumentInterface; callback เป็นทางเลือกชื่อคิว ค่าหมดเวลา และการเชื่อมต่อทั้งหมดถูกอ่านจาก config('nextpdf.queue.*')อินสแตนซ์ของ jobข้อผิดพลาดการ serialize หาก builder หรือ callback ไม่สามารถ serialize ได้builder ต้องคืนค่าเอกสารที่กำหนดค่าไว้
GeneratePdfJob::handle()ไม่มีresolve PdfDocumentInterface ใช้ builder ตรวจสอบเส้นทางผลลัพธ์ จากนั้นบันทึกvoidInvalidArgumentException สำหรับเส้นทางผลลัพธ์ที่ไม่ปลอดภัย; ข้อผิดพลาดขณะเขียนของ coreปฏิเสธ stream wrapper, null byte, ส่วน .. และเส้นทางที่ไม่ใช่ .pdf ทั้งหมด
GeneratePdfJob::failed(Throwable $exception)exception: สาเหตุของความล้มเหลวเรียก callback ความล้มเหลวที่กำหนดค่าไว้เมื่อมีอยู่voidความล้มเหลวของ callbackคง callback ให้เป็น idempotent
GeneratePdfJob::then(callable $callback)callback: รับเส้นทางผลลัพธ์แทนที่ callback ความสำเร็จselfข้อผิดพลาด serializable-closureตัวช่วยแบบ fluent สำหรับการตั้งค่าการ dispatch
GeneratePdfJob::catch(callable $callback)callback: รับ Throwable ที่ถูกโยนแทนที่ callback ความล้มเหลวselfข้อผิดพลาด serializable-closureใช้สำหรับการแจ้งเตือนหรือการล้างข้อมูลแบบชดเชย
  • PdfResponse เรียก getPdfData() เสมอก่อนสร้างการตอบสนอง ไม่ใช่ตัวสร้างเอกสารแบบ lazy
  • เพย์โหลดของคิวอาจถูกดัดแปลงระหว่างส่งผ่าน transport ที่ใช้ร่วมกัน; คงเส้นทางผลลัพธ์ให้อยู่ภายในไดเรกทอรีที่แอปพลิเคชันเป็นเจ้าของ
  • ใช้เอกสารใหม่ต่อแต่ละคำขอหรือแต่ละ job อย่านำเอกสารกลับมาใช้ซ้ำข้ามคำขอ