Skip to content

Pdf 門面

Pdf 門面提供一個方便的靜態代理,對應 TcpdfServiceProvider 所註冊的 PdfDocumentInterface 綁定。config/tcpdf-next.php 中的所有設定值都會自動套用。

php
use Yeeefang\TcpdfNext\Laravel\Facades\Pdf;

建立文件

Pdf::create() 從容器解析一個全新的 Document 實例,並預先套用所有設定預設值:

php
$pdf = Pdf::create();

$pdf->addPage()
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, '來自 Laravel 的 PDF!')
    ->save(storage_path('app/hello.pdf'));

每次呼叫 create() 都會回傳一個新的實例。文件不會在呼叫之間共享。

流式 API

所有 Document 方法都可透過門面使用,並回傳 static 以支援鏈式呼叫:

php
$pdf = Pdf::create()
    ->setTitle('季度報告')
    ->setAuthor('財務團隊')
    ->setMargins(left: 15, top: 20, right: 15)
    ->setAutoPageBreak(enabled: true, margin: 25)
    ->addPage()
    ->setFont('Helvetica', 'B', 18)
    ->cell(0, 12, '2026 年第一季報告')
    ->ln()
    ->setFont('Helvetica', '', 11)
    ->multiCell(0, 6, $reportBody);

設定綁定

門面從 config/tcpdf-next.php 讀取預設值。您可以針對個別文件覆寫任何設定:

php
// 使用設定預設值(A4 直式、Helvetica 11pt)
$default = Pdf::create();

// 僅對此文件覆寫頁面格式
$receipt = Pdf::create()
    ->setPageFormat('A5')
    ->setMargins(left: 10, top: 10, right: 10);

完整設定選項請參閱 Laravel 設定

門面類別參考

php
namespace Yeeefang\TcpdfNext\Laravel\Facades;

use Illuminate\Support\Facades\Facade;

/**
 * @method static \Yeeefang\TcpdfNext\Core\Document create()
 * @method static void fake()
 * @method static void assertCreated()
 * @method static void assertCreatedCount(int $count)
 *
 * @see \Yeeefang\TcpdfNext\Core\Document
 */
class Pdf extends Facade
{
    protected static function getFacadeAccessor(): string
    {
        return \Yeeefang\TcpdfNext\Contracts\PdfDocumentInterface::class;
    }
}

使用 Pdf::fake() 進行測試

將真實綁定替換為假實作,無需產生實際 PDF 位元組即可進行斷言:

php
use Yeeefang\TcpdfNext\Laravel\Facades\Pdf;

public function test_invoice_generates_pdf(): void
{
    Pdf::fake();

    $response = $this->get('/invoices/42/pdf');

    $response->assertOk();

    // 斷言文件已被建立
    Pdf::assertCreated();

    // 斷言恰好建立了一份文件
    Pdf::assertCreatedCount(1);
}

檢查假文件

假實作會記錄每個方法呼叫,讓您驗證流式鏈的內容:

php
Pdf::fake();

$this->get('/invoices/42/pdf');

Pdf::assertCreated(function ($pdf) {
    return $pdf->getTitle() === '發票 #42'
        && $pdf->getPageCount() >= 1;
});

在測試中替換綁定

若整合測試需要真實的 PDF 輸出,可綁定自訂實作:

php
use Yeeefang\TcpdfNext\Contracts\PdfDocumentInterface;
use Yeeefang\TcpdfNext\Core\Document;

$this->app->bind(PdfDocumentInterface::class, function () {
    return Document::create()->setCompression(false);
});

下一步

以 LGPL-3.0-or-later 授權釋出。