Skip to content

설계 철학

TCPDF-Next는 TCPDF에서 영감을 받았지만, 모던 PHP 시대를 위해 완전히 처음부터 다시 작성된 라이브러리입니다. 포크도 아니고, 점진적 업그레이드도 아닙니다 — 차세대 아키텍처 위에 구축된 완전히 새로운 라이브러리입니다.

기존 TCPDF는 10년 이상 PHP 커뮤니티에 훌륭하게 기여했습니다. 그러나 단일 파일, 30,000줄 아키텍처로는 현대 PDF 생성의 요구사항을 지원할 수 없습니다: PDF 2.0 준수, PAdES 디지털 서명, PDF/A-4 아카이빙, 또는 Laravel과 같은 프레임워크와의 통합.

TCPDF-Next는 PHP 개발자들이 익숙한 개념 — addPage(), cell(), setFont() — 을 유지하면서 2026년 표준에 맞게 모든 것을 재구축했습니다.

한눈에 보기

기존 TCPDFTCPDF-Next
PHP 버전5.x – 8.x8.5+ 전용
PDF 사양1.4 – 1.72.0 (ISO 32000-2:2020)
아키텍처단일 ~30K줄 클래스213개 파일, 26개 모듈, 12개 조합 가능 트레이트
타입 안전성없음PHPStan 레벨 8, Backed 열거형, 읽기 전용 클래스
디지털 서명기본 PKCS#7PAdES B-B (Core) → B-LTA (Pro)
아카이빙PDF/A-1b (부분)PDF/A-4 (ISO 19005-4:2020)
HTML 렌더링내장 (제한된 CSS)내장 + Chrome CDP (완전한 CSS3)
테스트~50개 테스트908+ 테스트, 28,881+ 어설션
확장성모놀리스 서브클래스모듈형 에코시스템 + 확장 API

에코시스템 아키텍처

TCPDF-Next는 모놀리스가 아닙니다. 각각 명확한 책임을 가진 4개 패키지로 구성된 모듈형 에코시스템입니다:

TCPDF-Next
Core
Artisan
Chrome CDP
Laravel
Framework
Pro
Enterprise
  • Core (148개 파일) — PDF 엔진. 문서 생성, 타이포그래피, 바코드, 암호화, PAdES B-B 디지털 서명에 필요한 모든 것이 포함되어 있습니다.
  • Artisan (17개 파일) — 픽셀 퍼펙트 HTML/CSS3 렌더링을 위한 Chrome CDP 통합. 래스터화된 이미지가 아닌 Form XObject를 통한 텍스트 선택 가능 PDF 출력.
  • Laravel (4개 파일) — 제로 설정 프레임워크 통합. Facade, HTTP 응답, 큐 작업, Octane 안전 바인딩.
  • Pro (47개 파일) — 엔터프라이즈 기능. PAdES B-T~B-LTA, PDF/A-4, HSM 서명, 특수 바코드.

확장 API는 개방되어 있습니다: 서드파티 개발자는 공개된 인터페이스(PdfDocumentInterface, SignerInterface, FontManagerInterface, HsmSignerInterface)를 통해 Core에 연결되는 자체 확장을 빌드할 수 있습니다.

12개의 조합 가능 트레이트

Document 클래스는 단일 진입점입니다. 모놀리식 클래스 대신, 12개의 집중된 트레이트로 기능이 구성됩니다:

트레이트책임
HasMetadata제목, 저자, 주제, 키워드, 언어
HasPages페이지 관리, 크기, 여백, 페이지 그룹
HasTypography폰트 로딩, 크기, 텍스트 장식, RTL, BiDi
HasColorsRGB, CMYK, 별색, 알파, 블렌드 모드
HasTextOutputcell(), multiCell(), text(), write(), writeHtml()
HasDrawing도형, 그래디언트, 패턴, SVG, EPS, 이미지
HasTransforms스케일, 회전, 이동, 기울기, 미러
HasLayout머리글, 바닥글, 컬럼, 소책자
HasNavigation북마크, 링크, 목차, 주석, 파일 첨부
HasInteractive폼 필드, 레이어, 템플릿, JavaScript
HasSecurity암호화, 디지털 서명, 태그된 PDF, BiDi, 선형화
HasOutputoutput(), save(), getPdfData(), 스트리밍

모든 공개 메서드는 플루언트 체이닝을 위해 static을 반환합니다:

php
$pdf = Document::create()
    ->setTitle('Invoice')       // HasMetadata
    ->addPage()                 // HasPages
    ->setFont('Helvetica', '', 12) // HasTypography
    ->setFillColor(240, 240, 240)  // HasColors
    ->cell(0, 10, 'Hello')     // HasTextOutput
    ->save('invoice.pdf');      // HasOutput

다음 단계

LGPL-3.0-or-later 라이선스로 배포됩니다.