글꼴과 정렬로 텍스트 구성하기
한눈에 보기
섹션 제목: “한눈에 보기”이 레시피에서는 텍스트를 배치하고 글꼴 패밀리, 스타일, 크기, 정렬을 설정합니다. 이 작업에는 세 가지 메서드인 setFont(), cell(), multiCell()을 사용합니다. 이 코드는 examples/04-text-and-fonts.php를 기준으로 합니다.
composer require nextpdf/core:^3이 제약 조건으로 nextpdf/core 패키지를 설치합니다. 이 예제는 PHP 8.4에서 실행됩니다.
개념 개요
섹션 제목: “개념 개요”setFont($family, $style, $size)는 활성 페이스를 선택합니다. 이 페이스는 이후 텍스트 호출에서 사용하는 글꼴입니다. $style 인수는 세 가지 플래그의 조합을 받습니다: B(굵게), I(기울임), U(밑줄). U 플래그는 텍스트 장식 플래그이며, 나머지는 글꼴 변형을 선택합니다. Helvetica, Times, Courier 패밀리는 ISO 32000-2에 명명된 14개의 표준 Type 1 글꼴로 해석됩니다. 적합성 프로필은 이를 재정의하여 대체 글꼴을 임베드하도록 강제할 수 있습니다.
cell()은 상자 안에 한 줄의 텍스트를 씁니다. multiCell()은 지정된 너비와 줄 높이에 맞춰 텍스트를 열 안에서 자동으로 줄바꿈합니다. 텍스트는 텍스트 공간에 배치되며, 텍스트 행렬이 텍스트 공간을 사용자 공간으로 매핑합니다 (ISO 32000-2). 사용자는 사용자 단위로 작업하고, 엔진이 대신 행렬을 출력합니다.
정렬은 Alignment 열거형으로 설정합니다: Left, Center, Right, Justify. multiCell()에서 양쪽 정렬은 단어 사이의 공백을 줄 전체에 분산시킵니다.
API 표면
섹션 제목: “API 표면”setFont(string $family, string $style = '', float $size = 12.0): static—NextPDF\Core\Concerns\HasTypography.cell(float $width, float $height, string $text = '', bool|string $border = false, bool $newLine = false, Alignment $align = Alignment::Left, bool $fill = false): static—NextPDF\Core\Concerns\HasTextOutput.multiCell(float $width, float $height, string $text, bool|string $border = false, Alignment $align = Alignment::Left): static— 동일한 트레이트.Alignment—NextPDF\Contracts\Alignment(Left,Center,Right,Justify).
전체 PHPDoc 표는 소스 코드에서 생성됩니다.
코드 샘플 — 빠른 시작
섹션 제목: “코드 샘플 — 빠른 시작”<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Contracts\Alignment;use NextPDF\Core\Document;
$doc = Document::createStandalone();$doc->addPage();
$doc->setFont('helvetica', 'B', 18);$doc->cell(0, 12, 'Heading', newLine: true);
$doc->setFont('helvetica', '', 11);$doc->multiCell(0, 7, 'Word-wrapped justified body text.', align: Alignment::Justify);
$doc->save(__DIR__ . '/out.pdf');코드 샘플 — 프로덕션
섹션 제목: “코드 샘플 — 프로덕션”이 예제는 자체 완결형이며 테스트 하니스에서 실행할 수 있습니다. examples/04-text-and-fonts.php를 반영하며, 스타일 변형, 다양한 크기, 자동 줄바꿈된 양쪽 정렬 텍스트, 세 가지 정렬 방식을 보여줍니다.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Contracts\Alignment;use NextPDF\Core\Document;
$doc = Document::createStandalone();$doc->setTitle('Text and Fonts');$doc->addPage();
$doc->setFont('helvetica', 'B', 18);$doc->cell(0, 12, 'Text and Font Styles', newLine: true);$doc->ln(5);
$doc->setFont('helvetica', '', 12);$doc->cell(0, 8, 'Normal text in Helvetica 12pt.', newLine: true);$doc->setFont('helvetica', 'B', 12);$doc->cell(0, 8, 'Bold text in Helvetica 12pt.', newLine: true);$doc->setFont('helvetica', 'I', 12);$doc->cell(0, 8, 'Italic text in Helvetica 12pt.', newLine: true);$doc->setFont('helvetica', 'BI', 12);$doc->cell(0, 8, 'Bold-Italic text in Helvetica 12pt.', newLine: true);$doc->ln(5);
$doc->setFont('helvetica', 'B', 14);$doc->cell(0, 10, 'Font Sizes', newLine: true);foreach ([8, 10, 12, 14, 18] as $size) { $doc->setFont('helvetica', '', (float) $size); $doc->cell(0, $size * 0.8, "This is {$size}pt text.", newLine: true);}$doc->ln(5);
$doc->setFont('helvetica', 'B', 14);$doc->cell(0, 10, 'Multi-Line Text (Word Wrap)', newLine: true);$doc->setFont('helvetica', '', 11);$paragraph = 'NextPDF is a modern PDF 2.0 library for PHP. It provides a ' . 'fluent API for document creation. This paragraph demonstrates ' . 'automatic word wrapping and justified alignment with multiCell().';$doc->multiCell(0, 7, $paragraph, align: Alignment::Justify);$doc->ln(5);
$doc->setFont('helvetica', 'B', 14);$doc->cell(0, 10, 'Text Alignment', newLine: true);$doc->setFont('helvetica', '', 11);$doc->cell(0, 8, 'Left-aligned text', newLine: true, align: Alignment::Left);$doc->cell(0, 8, 'Center-aligned text', newLine: true, align: Alignment::Center);$doc->cell(0, 8, 'Right-aligned text', newLine: true, align: Alignment::Right);
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT');$doc->save($out !== false ? $out : __DIR__ . '/compose-text-and-fonts.pdf');
echo "Wrote compose-text-and-fonts.pdf\n";예상 STDOUT:
Wrote compose-text-and-fonts.pdf엣지 케이스 및 주의 사항
섹션 제목: “엣지 케이스 및 주의 사항”- 너비 0은 남은 너비를 의미합니다.
0을 전달하면cell(0, ...)과multiCell(0, ...)은 너비를 오른쪽 여백까지 남은 공간으로 설정합니다. 고정 너비 상자에는 명시적인 너비를 전달하세요. - 스타일 문자열 순서.
'BI'와'IB'는 동일한 굵은 기울임 변형을 선택합니다. 파서가 플래그의 순서를 무시하기 때문입니다.'U'플래그는 글꼴 변형이 아니라 장식 플래그입니다. - 표준 글꼴 글리프 적용 범위. 14개의 표준 글꼴은 전체 WinAnsiEncoding(Windows-1252) 레퍼토리를 렌더링합니다. 여기에는 서유럽의 악센트가 있는 라틴 문자, 유로 기호, 그리고 일반적인 조판 문장 부호, 즉 en 대시와 em 대시, 둥근 따옴표, 글머리 기호, 줄임표, 상표 기호가 포함됩니다. 중국어, 일본어, 한국어, 아랍어, 히브리어, 그리스어, 키릴 문자, 태국어처럼 그 집합을 벗어나는 스크립트에는 TrueType 페이스를 등록한 뒤 선택하세요. 글꼴 임베드 및 서브셋을 참조하세요.
- 글꼴 크기 대비 줄 높이.
multiCell()의 줄당 높이는 글꼴 크기에 메트릭 프로필의 기본 줄 높이 비율을 곱한 값입니다. 높이가 너무 작으면 줄이 겹칠 수 있습니다. - 마지막 줄의 양쪽 정렬. 양쪽 정렬된
multiCell()은 단락의 마지막 줄을 늘리지 않습니다. 이는 일반적인 조판 방식과 일치합니다.
텍스트 출력은 글리프 수에 대해 선형이며 O(n)입니다. 예산은 wall_ms: 1000, peak_mb: 64입니다. 캐스케이드나 레이아웃 트리가 없으므로 HTML 레시피보다 비용이 낮습니다. 표준 글꼴은 임베드되지 않아 출력 크기가 작게 유지됩니다.
보안 참고 사항
섹션 제목: “보안 참고 사항”텍스트 콘텐츠는 해석되지 않고 그대로 렌더링됩니다. 출력 크기를 제한된 범위로 유지하려면 사용자가 제공한 문자열의 길이를 검증하세요. 이 경로는 스크립트를 실행하지 않으며 원격 리소스도 가져오지 않습니다.
적합성
섹션 제목: “적합성”| 문장 | 사양 | 조항 | reference_id (참조 ID) |
|---|---|---|---|
| Helvetica, Times, Courier 패밀리는 14개의 표준 Type 1 글꼴에 속합니다. | ISO 32000-2 | iso32000_2_sec9#x1.x29 | |
| standard-14 패밀리는 전체 라틴 문자 집합(WinAnsiEncoding, Windows 코드 페이지 1252)을 지원합니다. | ISO 32000-2 | Annex D.2 (iso32000_2_annexes#x1.x17.p4) | eb9220f88dfadad27a0be2206b64e68d8ea301d6d46e08142d43859c05fac6e4 |
| 텍스트 좌표는 텍스트 공간에 있으며, 텍스트 행렬에 의해 사용자 공간으로 매핑됩니다. | ISO 32000-2 | iso32000_2_sec8#x1.x10.p2 |
이 레시피는 NextPDF가 표준 글꼴로 텍스트를 구성하는 방법을 보여줍니다. 이 글꼴들의 글리프 적용 범위는 전체 WinAnsiEncoding(Windows-1252) 레퍼토리, 즉 서유럽 라틴 문자에 일반적인 조판 문장 부호를 더한 것입니다. 다른 스크립트의 텍스트에는 임베드된 페이스가 필요합니다.
상업적 맥락
섹션 제목: “상업적 맥락”해당 없음.