Symfony 패키지
Symfony · LGPL-3.0Symfony 패키지는 TCPDF-Next를 위한 퍼스트클래스 Symfony 7 통합을 제공합니다 — DI 컨테이너 바인딩, PdfFactory 서비스, Messenger 기반 비동기 생성, OWASP 보안 헤더가 포함된 HTTP 응답 헬퍼.
설치
bash
composer require yeeefang/tcpdf-next-symfony요구사항: Symfony ^7.0, PHP ^8.5
번들은 Symfony Flex를 통해 자동 구성됩니다. 수동 등록이 필요한 경우:
php
// config/bundles.php
return [
// ...
Yeeefang\TcpdfNext\Symfony\TcpdfNextBundle::class => ['all' => true],
];설정
yaml
# config/packages/tcpdf_next.yaml
tcpdf_next:
fonts_directory: '%kernel.project_dir%/resources/fonts'
default_page_size: A4
default_orientation: portrait
auto_page_break: true
margin_bottom: 25.0PdfFactory 서비스
서비스 또는 컨트롤러에서 팩토리를 주입하세요:
php
use Yeeefang\TcpdfNext\Symfony\PdfFactory;
class InvoiceController extends AbstractController
{
public function __construct(
private readonly PdfFactory $pdfFactory,
) {}
#[Route('/invoice/{id}/pdf')]
public function download(Invoice $invoice): Response
{
$pdf = $this->pdfFactory->create()
->setTitle("Invoice #{$invoice->number}")
->addPage()
->setFont('Helvetica', '', 12)
->cell(0, 10, "Invoice #{$invoice->number}");
return $this->pdfFactory->response($pdf, "invoice-{$invoice->number}.pdf");
}
}HTTP 응답
PdfResponse 클래스는 OWASP 권장 보안 헤더와 함께 PDF를 반환합니다:
php
use Yeeefang\TcpdfNext\Symfony\Http\PdfResponse;
// 인라인 표시 (브라우저 미리보기)
return PdfResponse::inline($pdf, 'report.pdf');
// 강제 다운로드
return PdfResponse::download($pdf, 'report.pdf');Messenger 통합
PDF 생성을 Messenger 워커에 디스패치하세요:
php
use Yeeefang\TcpdfNext\Symfony\Messenger\GeneratePdfMessage;
$this->bus->dispatch(new GeneratePdfMessage(
template: 'invoice',
data: ['invoice_id' => $invoice->id],
outputPath: "/tmp/invoice-{$invoice->id}.pdf",
));워커 안전 (FrankenPHP / RoadRunner)
번들은 DocumentFactory를 싱글톤으로 구성합니다 — 폰트 레지스트리와 이미지 캐시는 영속 워커에서 요청 간에 유지됩니다. FrankenPHP, RoadRunner 및 모든 Symfony Runtime 구현과 호환됩니다.
패키지 구성
| 클래스 | 설명 |
|---|---|
TcpdfNextBundle | 번들 등록 및 서비스 와이어링 |
PdfFactory | DI 친화적인 PDF 문서 생성 팩토리 |
PdfResponse | 보안 헤더가 포함된 HTTP 응답 |
GeneratePdfMessage | 비동기 생성을 위한 Messenger 메시지 |
GeneratePdfMessageHandler | 비동기 PDF 생성 핸들러 |
