Tekst, lettertypes en paginabasis
In de eerste tutorial renderde je een pagina met één enkele regel tekst. Deze keer neem je de controle over de pagina zelf en over de tekst erop. Je kiest een paginaformaat, schrijft koppen en alinea’s, en geeft ze stijl met de ingebouwde lettertypes van de engine.
Wat je gaat bouwen
Sectie met titel “Wat je gaat bouwen”Je schrijft twee kleine scripts. Elk daarvan produceert een Portable Document Format-bestand (PDF) van één pagina:
01-text-basics.phprendert een A4-pagina in portret met een gekleurde kop, teruglopende alinea’s en drie uitlijningsvoorbeelden.02-fonts.phprendert een voorbeeldpagina die twee ingebouwde lettertypefamilies in verschillende groottes vergelijkt.
Alles draait met alleen het pakket nextpdf/core. Je hebt geen
lettertypebestanden nodig, geen extra extensies en geen netwerk. Heb je nog
geen project opgezet, volg dan eerst de eerste tutorial
en kom daarna terug.
Stap 1: Tekst opmaken op een A4-pagina
Sectie met titel “Stap 1: Tekst opmaken op een A4-pagina”Elke pagina heeft een formaat en een oriëntatie. A4 is het gangbare
internationale papierformaat en Letter is de Amerikaanse tegenhanger. De
oriëntatie is ofwel portret (staand) ofwel landschap (liggend). Je geeft beide
keuzes door aan addPage() wanneer je een pagina begint.
Drie methoden verzorgen vervolgens het schrijven. setFont() kiest het lettertype
en de grootte voor de tekst die volgt. cell() schrijft één regel binnen een
onzichtbaar vak. multiCell() laat langere tekst teruglopen over zoveel regels
als nodig is. In beide methoden betekent een breedte van 0 “gebruik alles tot
aan de rechtermarge”.
Twee andere aanroepen bepalen het uiterlijk. setTextColor() verwacht rode,
groene en blauwe waarden van 0 tot 255 en blijft gelden totdat je die opnieuw
wijzigt. De Alignment-enum, een vaste lijst met benoemde keuzes, biedt
Left, Center, Right en Justify.
Maak 01-text-basics.php aan in je projectmap:
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Contracts\Alignment;use NextPDF\Contracts\Orientation;use NextPDF\Core\Document;use NextPDF\ValueObjects\PageSize;
@mkdir(__DIR__ . '/out');
$document = Document::createStandalone();$document->setTitle('Text basics');$document->addPage(PageSize::A4(), Orientation::Portrait);
// A colored heading. The values are red, green, and blue, each 0 to 255.$document->setFont('helvetica', 'B', 20);$document->setTextColor(30, 64, 175);$document->cell(0, 14, 'Project kickoff notes', newLine: true);$document->ln(4);
// Back to black for the body text.$document->setTextColor(0, 0, 0);$document->setFont('helvetica', '', 11);$document->multiCell( 0, 7, 'Welcome to the second tutorial. This paragraph is written with ' . 'multiCell(), so the engine wraps the words onto as many lines ' . 'as the page width requires.',);$document->ln(4);
$document->multiCell( 0, 7, 'Justified text stretches the spaces so both edges line up. It is a ' . 'good fit for report bodies and other long passages.', align: Alignment::Justify,);$document->ln(6);
// One line each: left, centered, and right.$document->setFont('helvetica', 'I', 11);$document->cell(0, 8, 'Left-aligned line', newLine: true, align: Alignment::Left);$document->cell(0, 8, 'Centered line', newLine: true, align: Alignment::Center);$document->cell(0, 8, 'Right-aligned line', newLine: true, align: Alignment::Right);
$document->save(__DIR__ . '/out/text-basics.pdf');
echo "Wrote out/text-basics.pdf\n";Voer het uit met php 01-text-basics.php. Het script drukt
Wrote out/text-basics.pdf af en het bestand verschijnt in de nieuwe map
out/.
Wat er zojuist gebeurde
Sectie met titel “Wat er zojuist gebeurde”addPage(PageSize::A4(), Orientation::Portrait) maakte de pagina aan voordat
er tekst werd geschreven. Geef in plaats daarvan Orientation::Landscape door
en dezelfde pagina draait liggend. Andere benoemde formaten, zoals
PageSize::A5() of PageSize::Letter(), werken op dezelfde manier.
setFont('helvetica', 'B', 20) selecteerde vette Helvetica op 20 punten. Een
punt (pt) is de traditionele drukeenheid; 72 punten zijn één inch. De kop is
blauw omdat setTextColor(30, 64, 175) actief was toen de cell()-aanroep hem
schreef. De volgende setTextColor(0, 0, 0) schakelde terug naar zwart voor
alles daarna.
De twee multiCell()-aanroepen lieten hun alinea’s automatisch teruglopen. De
uitgevulde variant rekt de woordspatiëring op zodat beide randen uitlijnen,
behalve op de laatste regel van de alinea. Tussen blokken door verplaatste
ln() de schrijfpositie omlaag om wat lucht toe te voegen. Ten slotte bouwde
save() het bestand en schreef het weg naar out/.
Voor elke parameter die deze methoden accepteren, zie Tekst samenstellen met lettertypes en uitlijning.
Stap 2: Kiezen uit de ingebouwde lettertypes
Sectie met titel “Stap 2: Kiezen uit de ingebouwde lettertypes”De engine levert drie ingebouwde tekstfamilies: Helvetica, Times en Courier. Helvetica is een schreefloos lettertype, wat betekent dat de letters geen kleine eindstreepjes (schreven) hebben. Times is een lettertype met schreef dat goed leest in lange, drukwerkachtige passages. Courier heeft een vaste breedte en is daarom geschikt voor codelijsten en bonnetjes. Omdat deze families ingebouwd zijn, hebben je scripts helemaal geen lettertypebestanden nodig.
Het stijlargument van setFont() combineert vlaggen van één letter: 'B' voor
vet, 'I' voor cursief en 'U' voor onderstreept. Een lege string betekent
regulier, en vlaggen laten zich combineren, dus 'BI' geeft vet cursief.
De ingebouwde families dekken tekst in het Latijnse schrift. Voor andere schriftsystemen of je eigen merklettertype registreer je een lettertypebestand, zoals het recept Lettertypes insluiten en subsetten (subsetten behoudt alleen de tekens die je daadwerkelijk hebt gebruikt, zodat bestanden klein blijven) laat zien. De lettertype-ondersteuningsmatrix vermeldt elk lettertypeformaat dat de engine accepteert.
Maak 02-fonts.php aan naast het eerste script:
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
@mkdir(__DIR__ . '/out');
$document = Document::createStandalone();$document->setTitle('Font sampler');$document->addPage();
$document->setFont('helvetica', 'B', 20);$document->cell(0, 14, 'Built-in font sampler', newLine: true);$document->ln(4);
// Helvetica: a sans-serif face, a solid default for labels and headings.$document->setFont('helvetica', 'B', 14);$document->cell(0, 10, 'Helvetica', newLine: true);foreach ([10, 12, 16] as $size) { $document->setFont('helvetica', '', (float) $size); $document->cell(0, $size * 0.8, "Helvetica sample at {$size}pt.", newLine: true);}$document->setFont('helvetica', 'BI', 12);$document->cell(0, 9, 'Helvetica bold italic for emphasis.', newLine: true);$document->ln(6);
// Times: a serif face that suits long, print-like passages.$document->setFont('times', 'B', 14);$document->cell(0, 10, 'Times', newLine: true);foreach ([10, 12, 16] as $size) { $document->setFont('times', '', (float) $size); $document->cell(0, $size * 0.8, "Times sample at {$size}pt.", newLine: true);}$document->setFont('times', 'I', 12);$document->cell(0, 9, 'Times italic for quotations.', newLine: true);
$document->save(__DIR__ . '/out/font-sampler.pdf');
echo "Wrote out/font-sampler.pdf\n";Voer het uit met php 02-fonts.php en open out/font-sampler.pdf. Je ziet
dezelfde voorbeeldzin van karakter veranderen tussen de twee families en groter
worden over drie groottes.
Wat er zojuist gebeurde
Sectie met titel “Wat er zojuist gebeurde”addPage() zonder argumenten gebruikte de standaardpagina-instelling in
portretoriëntatie, zodat niet elk script het formaat expliciet hoeft te
vermelden. Elke setFont()-aanroep wisselde de actieve familie, stijl of
grootte midden op de pagina, en een lettertype blijft actief tot de volgende
setFont()-aanroep.
De lussen casten de grootte met (float) omdat setFont() een decimaal getal
verwacht. De regelhoogtes schalen mee met de lettertypegrootte ($size * 0.8),
zodat grotere tekst hogere regels krijgt en niets overlapt. Vervang 'times'
eens door 'courier' en voer het script opnieuw uit om de derde familie te
zien.
Als er iets misging
Sectie met titel “Als er iets misging”- Een fout als “class not found” of een autoload-fout betekent meestal dat het
script
vendor/autoload.phpniet vond. Voer het uit binnen de projectmap dievendor/bevat. - Een verkeerd getypte familienaam werpt een exception op die het lettertype
noemt dat niet gevonden kon worden. Controleer de spelling:
helvetica,times,courier. - De probleemoplossingshub verzamelt veelvoorkomende oplossingen, en Lettertypes en tagging behandelt lettertypeproblemen in detail.
- Elke engine-exception is gedocumenteerd in de foutreferentie, met de context die deze meedraagt en de herstelactie.
Volgende
Sectie met titel “Volgende”Je kunt nu pagina’s vormgeven, tekst opmaken en doelbewust lettertypes kiezen. In de volgende tutorial plaats je afbeeldingen op de pagina en organiseer je de inhoud met tabellen en lijsten.