콘텐츠로 이동

글꼴과 정렬로 텍스트 구성하기

이 레시피에서는 텍스트를 배치하고 글꼴 패밀리, 스타일, 크기, 정렬을 설정합니다. 이 작업에는 세 가지 메서드인 setFont(), cell(), multiCell()을 사용합니다. 이 코드는 examples/04-text-and-fonts.php를 기준으로 합니다.

Terminal window
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()에서 양쪽 정렬은 단어 사이의 공백을 줄 전체에 분산시킵니다.

  • setFont(string $family, string $style = '', float $size = 12.0): staticNextPDF\Core\Concerns\HasTypography.
  • cell(float $width, float $height, string $text = '', bool|string $border = false, bool $newLine = false, Alignment $align = Alignment::Left, bool $fill = false): staticNextPDF\Core\Concerns\HasTextOutput.
  • multiCell(float $width, float $height, string $text, bool|string $border = false, Alignment $align = Alignment::Left): static — 동일한 트레이트.
  • AlignmentNextPDF\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-2iso32000_2_sec9#x1.x29
standard-14 패밀리는 전체 라틴 문자 집합(WinAnsiEncoding, Windows 코드 페이지 1252)을 지원합니다.ISO 32000-2Annex D.2 (iso32000_2_annexes#x1.x17.p4)eb9220f88dfadad27a0be2206b64e68d8ea301d6d46e08142d43859c05fac6e4
텍스트 좌표는 텍스트 공간에 있으며, 텍스트 행렬에 의해 사용자 공간으로 매핑됩니다.ISO 32000-2iso32000_2_sec8#x1.x10.p2

이 레시피는 NextPDF가 표준 글꼴로 텍스트를 구성하는 방법을 보여줍니다. 이 글꼴들의 글리프 적용 범위는 전체 WinAnsiEncoding(Windows-1252) 레퍼토리, 즉 서유럽 라틴 문자에 일반적인 조판 문장 부호를 더한 것입니다. 다른 스크립트의 텍스트에는 임베드된 페이스가 필요합니다.

해당 없음.