Zum Inhalt springen

Text mit Schriftarten und Ausrichtung setzen

Dieses Recipe platziert Text und legt Schriftfamilie, Stil, Größe und Ausrichtung fest. Drei Methoden übernehmen diese Aufgabe: setFont(), cell() und multiCell(). Der Code folgt examples/04-text-and-fonts.php.

Terminal-Fenster
composer require nextpdf/core:^3

Diese Einschränkung installiert das Paket nextpdf/core. Das Beispiel ist für PHP 8.4 lauffähig.

setFont($family, $style, $size) wählt den aktiven Schriftschnitt aus, also die Schrift, die der nächste Textaufruf verwendet. Das Argument $style kombiniert drei Flags: B (fett), I (kursiv) und U (unterstrichen). Das Flag U ist ein Textdekorations-Flag; die anderen Flags wählen die Schriftvariante aus. Die Schriftfamilien Helvetica, Times und Courier werden auf die 14 standardmäßigen Type-1-Schriften abgebildet, die in ISO 32000-2 benannt sind. Ein Konformitätsprofil kann dieses Verhalten überschreiben und erzwingen, dass eine Ersatzschrift eingebettet wird.

cell() schreibt eine einzelne Zeile in eine Box. multiCell() bricht Text automatisch in eine Spalte mit der angegebenen Breite und Zeilenhöhe um. Text liegt im Textraum; die Textmatrix bildet den Textraum auf den Benutzerraum ab (ISO 32000-2). Sie arbeiten in Benutzereinheiten, die Engine gibt die Matrix für Sie aus.

Legen Sie die Ausrichtung mit dem Enum Alignment fest: Left, Center, Right, Justify. Bei multiCell() verteilt der Blocksatz den Abstand zwischen den Wörtern über die Zeile.

  • 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 — derselbe Trait.
  • AlignmentNextPDF\Contracts\Alignment (Left, Center, Right, Justify).

Die vollständige PHPDoc-Tabelle wird aus dem Quellcode generiert.

<?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');

Dieses Beispiel ist eigenständig und kann vom Test-Harness ausgeführt werden. Es spiegelt examples/04-text-and-fonts.php wider und zeigt Stilvarianten, verschiedene Größen, automatisch umbrochenen Text im Blocksatz sowie die drei Ausrichtungen.

<?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";

Erwartete STDOUT-Ausgabe:

Wrote compose-text-and-fonts.pdf
  • Breite 0 bedeutet verbleibende Breite. Wenn Sie 0 übergeben, setzen cell(0, ...) und multiCell(0, ...) die Breite auf den verfügbaren Raum bis zum rechten Rand. Für eine Box mit fester Breite übergeben Sie eine explizite Breite.
  • Reihenfolge im Stil-String. 'BI' und 'IB' wählen dieselbe Fett-Kursiv-Variante aus, weil der Parser die Reihenfolge der Flags ignoriert. Das Flag 'U' ist ein Dekorations-Flag, keine Schriftvariante.
  • Glyphenabdeckung der Standardschriften. Die 14 Standardschriften rendern das vollständige WinAnsiEncoding-Repertoire (Windows-1252). Das umfasst westeuropäische lateinische Zeichen mit Akzenten, das Euro-Zeichen und gängige typografische Satzzeichen — Halbgeviert- und Geviertstriche, typografische Anführungszeichen, den Aufzählungspunkt, die Auslassungspunkte und das Trademark-Zeichen. Für Schriftsysteme außerhalb dieses Zeichensatzes, etwa Chinesisch, Japanisch, Koreanisch, Arabisch, Hebräisch, Griechisch, Kyrillisch oder Thailändisch, registrieren und wählen Sie einen TrueType-Schriftschnitt aus. Siehe Schriften einbetten und subsetten.
  • Zeilenhöhe im Vergleich zur Schriftgröße. Die Höhe pro Zeile von multiCell() entspricht der Schriftgröße multipliziert mit dem Standard-Zeilenhöhenverhältnis des Metrikprofils. Eine zu kleine Höhe kann dazu führen, dass sich Zeilen überlappen.
  • Blocksatz in der letzten Zeile. Ein multiCell() im Blocksatz streckt die letzte Zeile eines Absatzes nicht. Das entspricht dem üblichen Schriftsatz.

Die Textausgabe ist linear zur Glyphenzahl, O(n). Das Budget beträgt wall_ms: 1000, peak_mb: 64. Es liegt niedriger als bei den HTML-Recipes, weil es keine Kaskade und keinen Layout-Baum gibt. Standardschriften werden nicht eingebettet, wodurch die Ausgabe klein bleibt.

Textinhalt wird gerendert, nicht interpretiert. Validieren Sie die Länge von benutzergelieferten Strings, damit die Ausgabegröße begrenzt bleibt. Dieser Pfad führt kein Skript aus und ruft keine entfernte Ressource ab.

AussageSpezifikationAbschnittreference_id
Die Schriftfamilien Helvetica, Times und Courier gehören zu den 14 standardmäßigen Type-1-Schriften.ISO 32000-2iso32000_2_sec9#x1.x29
Die Standard-14-Familien unterstützen den vollständigen lateinischen Zeichensatz (WinAnsiEncoding, Windows-Codepage 1252).ISO 32000-2Annex D.2 (iso32000_2_annexes#x1.x17.p4)eb9220f88dfadad27a0be2206b64e68d8ea301d6d46e08142d43859c05fac6e4
Textkoordinaten liegen im Textraum und werden von der Textmatrix auf den Benutzerraum abgebildet.ISO 32000-2iso32000_2_sec8#x1.x10.p2

Dieses Recipe zeigt, wie NextPDF Text mit den Standardschriften setzt. Ihre Glyphenabdeckung ist das vollständige WinAnsiEncoding-Repertoire (Windows-1252) — westeuropäisches Latein plus gängige typografische Satzzeichen. Text in anderen Schriftsystemen erfordert einen eingebetteten Schriftschnitt.

Nicht zutreffend.