Tekst samenstellen met lettertypen en uitlijning
In één oogopslag
Sectie met titel “In één oogopslag”Gebruik dit recipe om tekst te plaatsen en het lettertype, de stijl, de grootte en de uitlijning ervan in te stellen. U gebruikt hiervoor drie methoden: setFont(), cell() en multiCell(). De code volgt examples/04-text-and-fonts.php.
Installeren
Sectie met titel “Installeren”composer require nextpdf/core:^3Deze constraint installeert het pakket nextpdf/core. Het voorbeeld vereist PHP 8.4.
Conceptueel overzicht
Sectie met titel “Conceptueel overzicht”setFont($family, $style, $size) selecteert het actieve lettertype voor de volgende tekstaanroep. Het argument $style combineert drie vlaggen: B (vet), I (cursief) en U (onderstreept). De vlag U past tekstdecoratie toe; de andere vlaggen selecteren de lettertypevariant. De families Helvetica, Times en Courier worden toegewezen aan de 14 standaard Type 1-lettertypen die worden genoemd in ISO 32000-2. Een conformiteitsprofiel kan dit overschrijven en een ingebed vervangend lettertype vereisen.
cell() schrijft één regel binnen een kader. multiCell() plaatst tekst met automatische regelafbreking in een kolom met de breedte en regelhoogte die u opgeeft. Tekst begint in de tekstruimte en de tekstmatrix wijst de tekstruimte toe aan de gebruikersruimte (ISO 32000-2). U werkt in gebruikerseenheden en de engine genereert de matrix voor u.
Stel de uitlijning in met de enum Alignment: Left, Center, Right, Justify. Bij multiCell() verdeelt uitvulling de woordspatiëring over de regel.
API-oppervlak
Sectie met titel “API-oppervlak”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— dezelfde trait.Alignment—NextPDF\Contracts\Alignment(Left,Center,Right,Justify).
De volledige PHPDoc-tabel is afkomstig uit de broncode.
Codevoorbeeld — snelstart
Sectie met titel “Codevoorbeeld — snelstart”<?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');Codevoorbeeld — productie
Sectie met titel “Codevoorbeeld — productie”Dit voorbeeld is zelfstandig, zodat het testharnas het kan uitvoeren. Het komt overeen met examples/04-text-and-fonts.php en toont stijlvarianten, meerdere groottes, tekst met automatische regelafbreking en uitvulling, plus de drie uitlijningen.
<?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";Verwachte STDOUT:
Wrote compose-text-and-fonts.pdfRandgevallen en valkuilen
Sectie met titel “Randgevallen en valkuilen”- Breedte 0 betekent de resterende breedte. Wanneer u
0doorgeeft, gebruikencell(0, ...)enmultiCell(0, ...)de ruimte tot aan de rechtermarge. Geef voor een kader met een vaste breedte een expliciete breedte op. - Volgorde van de stijltekenreeks.
'BI'en'IB'selecteren dezelfde vet-cursieve variant, omdat de parser de volgorde van de vlaggen negeert. De vlag'U'is een decoratievlag, geen lettertypevariant. - Glyphdekking van standaardlettertypen. De 14 standaardlettertypen geven het volledige WinAnsiEncoding (Windows-1252)-repertoire weer. Dit dekt West-Europees Latijn met accenten, het euroteken en gangbare typografische interpunctie — en- en em-streepjes, krulaanhalingstekens, het opsommingsteken, het beletselteken en het handelsmerksymbool. Registreer en selecteer een TrueType-lettertype voor schriften buiten die set, zoals Chinees, Japans, Koreaans, Arabisch, Hebreeuws, Grieks, Cyrillisch of Thai. Zie Lettertypen insluiten en subsetten.
- Regelhoogte vergeleken met lettergrootte. De hoogte per regel van
multiCell()is de lettergrootte maal de standaardregelhoogteverhouding van het metrisch profiel. Als de hoogte te klein is, kunnen regels elkaar overlappen. - Uitvulling op de laatste regel. Een uitgevulde
multiCell()rekt de laatste regel van een alinea niet uit. Dit komt overeen met conventionele zetwerkpraktijk.
Prestaties
Sectie met titel “Prestaties”Tekstuitvoer is lineair in het aantal glyphs, O(n). Het budget is wall_ms: 1000, peak_mb: 64. Dat is lager dan bij de recipes met HyperText Markup Language (HTML), omdat er geen cascade of lay-outboom is. Standaardlettertypen worden niet ingesloten, waardoor de uitvoer klein blijft.
Beveiligingsopmerkingen
Sectie met titel “Beveiligingsopmerkingen”Tekstinhoud wordt weergegeven, niet geïnterpreteerd. Valideer de lengte van door de gebruiker aangeleverde tekenreeksen om de uitvoergrootte begrensd te houden. Dit pad voert geen script uit en haalt geen externe bron op.
Conformiteit
Sectie met titel “Conformiteit”| Verklaring | Spec | Clausule | reference_id |
|---|---|---|---|
| De families Helvetica, Times en Courier behoren tot de 14 standaard Type 1-lettertypen. | ISO 32000-2 | iso32000_2_sec9#x1.x29 | |
| De standaard-14-families ondersteunen de volledige Latijnse tekenset (WinAnsiEncoding, Windows-codepagina 1252). | ISO 32000-2 | Annex D.2 (iso32000_2_annexes#x1.x17.p4) | eb9220f88dfadad27a0be2206b64e68d8ea301d6d46e08142d43859c05fac6e4 |
| Tekstcoördinaten bevinden zich in de tekstruimte en worden door de tekstmatrix toegewezen aan de gebruikersruimte. | ISO 32000-2 | iso32000_2_sec8#x1.x10.p2 |
Dit recipe laat zien hoe NextPDF tekst samenstelt met de standaardlettertypen. Hun glyphdekking is het volledige WinAnsiEncoding (Windows-1252)-repertoire — West-Europees Latijn plus gangbare typografische interpunctie. Tekst in andere schriften vereist een ingebed lettertype.
Commerciële context
Sectie met titel “Commerciële context”Niet van toepassing.