자주 묻는 질문
TCPDF-Next가 PHP 8.5+를 요구하는 이유는 무엇인가요?
PHP 8.5는 라이브러리 아키텍처의 근본이 되는 언어 기능을 도입합니다 — 파이프 연산자 지원, 향상된 타입 추론, 개선된 readonly 시맨틱스를 포함합니다. 모던 런타임을 타겟팅함으로써 TCPDF-Next는 우회 방법이 아닌 설계로 더 작고, 빠르고, 안전할 수 있습니다.
더 자세한 근거는 왜 PHP 8.5+인가?를 참조하세요.
TCPDF-Next는 TCPDF의 포크인가요?
아닙니다. TCPDF-Next는 완전히 처음부터 다시 작성된 라이브러리입니다. 기존 TCPDF 라이브러리와 코드를 공유하지 않습니다. 이름의 "TCPDF" 부분은 문제 영역(PHP에서의 PDF 생성)과 레거시 프로젝트가 커뮤니티에 미친 영향을 인정하지만, 아키텍처, API 표면, 구현은 완전히 새롭습니다.
Laravel 없이 사용할 수 있나요?
예. tcpdf-next/core 패키지는 완전히 프레임워크에 독립적입니다. PHP 8.5+에만 의존하며 프레임워크 의존성이 전혀 없습니다. Symfony, Slim, 순수 PHP 스크립트, CLI 도구, 큐 워커 등 모든 PHP 애플리케이션에서 사용할 수 있습니다.
선택적 tcpdf-next/laravel 패키지는 Laravel 전용 편의 기능(서비스 프로바이더, Facade, 설정 공개)을 추가하지만 필수는 아닙니다.
Core와 Pro의 차이점은 무엇인가요?
| Core | Pro | |
|---|---|---|
| 라이선스 | MIT | 상용 |
| PDF 생성 | 전체 기능 | 전체 기능 |
| 고급 타이포그래피 | 기본 | OpenType 셰이핑, BiDi, 리거처 |
| 디지털 서명 | 포함되지 않음 | PAdES / CAdES / X.509 |
| PDF/A, PDF/X | 포함되지 않음 | 전체 준수 모드 |
| 바코드 엔진 | 1D 바코드 | 1D + 2D (QR, DataMatrix, PDF417) |
| 지원 | 커뮤니티 (GitHub Issues) | 우선 이메일 + SLA |
Core는 자체적으로 프로덕션에 사용할 수 있습니다. Pro는 엔터프라이즈 및 규정 준수 기능으로 이를 확장합니다.
완전한 CSS3를 지원하는 HTML-to-PDF를 어떻게 생성하나요?
Artisan 패키지(tcpdf-next/artisan)를 사용하세요. HTML + CSS3 입력을 받아 픽셀 단위로 정확한 PDF 출력을 생성하는 렌더링 파이프라인을 제공하며, 내부적으로 TCPDF-Next Core를 기반으로 합니다.
use Yeeefang\TcpdfNext\Artisan\HtmlRenderer;
$renderer = HtmlRenderer::create();
$renderer->loadHtml('<h1>Hello</h1><p style="color: navy;">Styled paragraph.</p>');
$renderer->save('/output/report.pdf');Artisan은 Flexbox, Grid, 웹 폰트, 미디어 쿼리, 그리고 CSS3 사양의 대부분을 지원합니다.
TCPDF-Next는 CJK(중국어, 일본어, 한국어)를 지원하나요?
예. TCPDF-Next는 CJK 스크립트와 복잡한 텍스트 레이아웃을 최고 수준으로 지원합니다:
- CjkFontValidator — CJK 폰트 파일을 검증하고 서브셋하여 올바른 글리프 커버리지를 보장합니다.
- BiDiResolver — 양방향 텍스트(예: 영어와 아랍어/히브리어 혼합)를 처리합니다.
- ArabicShaper — 아랍어, 페르시아어, 우르두어의 컨텍스트 셰이핑 규칙을 적용합니다.
폰트 설정을 통해 CJK 호환 TrueType/OpenType 폰트를 임베드하면 텍스트 렌더링이 자동으로 작동합니다.
$doc->configureFonts(function (FontConfig $config): void {
$config->addFont('/fonts/NotoSansCJK-Regular.ttc', alias: 'NotoSansCJK');
});
$doc->setFont('NotoSansCJK', size: 12);
$doc->cell(text: '你好世界'); // 중국어
$doc->cell(text: 'こんにちは世界'); // 일본어
$doc->cell(text: '안녕하세요 세계'); // 한국어TCPDF-Next는 프로덕션에 사용할 수 있나요?
예. 이 라이브러리는 엄격한 테스트 및 분석 파이프라인을 갖추고 있습니다:
- 908+ 테스트 — 유닛, 통합, 비주얼 회귀 시나리오를 포함합니다.
- 28,881+ 어설션 — 테스트 스위트 전반에 걸쳐.
- PHPStan 레벨 8 — 가장 엄격한 정적 분석 레벨 — 오류 제로로 통과합니다.
- 100%
declare(strict_types=1)— 모든 소스 파일에 적용.
테스트 스위트는 모든 풀 리퀘스트에서 실행되며 병합 전 통과가 필수입니다.
보안 취약점을 어떻게 신고하나요?
공개 GitHub 이슈를 열지 마세요. 대신 GitHub 보안 권고를 사용하여 비공개로 취약점을 신고하세요. 메인테이너가 리포트를 분류하고 수정을 조율한 후 보안 릴리스를 게시합니다.
자세한 내용은 저장소의 SECURITY.md 파일을 참조하세요.