Comporre testo con font e allineamento
In sintesi
Sezione intitolata “In sintesi”Questa ricetta posiziona il testo e configura famiglia di font, stile, dimensione e allineamento. Tre metodi gestiscono queste operazioni: setFont(), cell() e multiCell(). Il codice segue examples/04-text-and-fonts.php.
Installazione
Sezione intitolata “Installazione”composer require nextpdf/core:^3Questo vincolo installa il pacchetto nextpdf/core. L’esempio è eseguito con PHP 8.4.
Panoramica concettuale
Sezione intitolata “Panoramica concettuale”setFont($family, $style, $size) seleziona il tipo di carattere attivo, cioè il font usato dalla successiva chiamata di testo. L’argomento $style combina tre flag: B (grassetto), I (corsivo) e U (sottolineato). Il flag U è una decorazione del testo; gli altri selezionano la variante del font. Le famiglie Helvetica, Times e Courier corrispondono ai 14 font Type 1 standard indicati in ISO 32000-2. Un profilo di conformità può sovrascrivere questo comportamento e forzare l’incorporamento di un font sostitutivo.
cell() scrive una singola riga all’interno di un riquadro. multiCell() applica automaticamente il ritorno a capo al testo in una colonna, in base alla larghezza e all’altezza di riga indicate. Il testo si trova nello spazio del testo e la matrice di testo mappa lo spazio del testo sullo spazio utente (ISO 32000-2). Si lavora in unità utente e il motore emette la matrice automaticamente.
Impostare l’allineamento tramite l’enum Alignment: Left, Center, Right, Justify. Con multiCell(), la giustificazione distribuisce lo spazio tra le parole lungo la riga.
Superficie API
Sezione intitolata “Superficie 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— stesso trait.Alignment—NextPDF\Contracts\Alignment(Left,Center,Right,Justify).
La tabella PHPDoc completa viene generata dal codice sorgente.
Esempio di codice — Avvio rapido
Sezione intitolata “Esempio di codice — Avvio rapido”<?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');Esempio di codice — Produzione
Sezione intitolata “Esempio di codice — Produzione”Questo esempio è autonomo e può essere eseguito dal test harness. Rispecchia examples/04-text-and-fonts.php e mostra varianti di stile, diverse dimensioni, testo giustificato con ritorno a capo automatico e i tre allineamenti.
<?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 previsto:
Wrote compose-text-and-fonts.pdfCasi limite e insidie
Sezione intitolata “Casi limite e insidie”- La larghezza 0 indica la larghezza residua. Quando si passa
0,cell(0, ...)emultiCell(0, ...)impostano la larghezza sullo spazio disponibile fino al margine destro. Per un riquadro a larghezza fissa, passare una larghezza esplicita. - Ordine della stringa di stile.
'BI'e'IB'selezionano la stessa variante grassetto-corsivo, perché il parser ignora l’ordine dei flag. Il flag'U'è un flag di decorazione, non una variante del font. - Copertura dei glifi dei font standard. I 14 font standard rendono l’intero repertorio WinAnsiEncoding (Windows-1252). Questo copre il latino accentato dell’Europa occidentale, il segno dell’euro e la punteggiatura tipografica comune — i trattini en ed em, le virgolette curve, il punto elenco, i puntini di sospensione e il segno di marchio. Per script al di fuori di tale insieme, come cinese, giapponese, coreano, arabo, ebraico, greco, cirillico o thailandese, registrare e selezionare un tipo di carattere TrueType. Vedere Incorporare e creare subset di font.
- Altezza di riga rispetto alla dimensione del font. L’altezza di riga di
multiCell()corrisponde alla dimensione del font moltiplicata per il rapporto di altezza di riga predefinito del profilo metrico. Un’altezza troppo ridotta può far sovrapporre le righe. - Giustificazione sull’ultima riga. Un
multiCell()giustificato non espande l’ultima riga di un paragrafo. Ciò corrisponde alla composizione tipografica convenzionale.
Prestazioni
Sezione intitolata “Prestazioni”L’emissione del testo è lineare rispetto al numero di glifi, O(n). Il budget è wall_ms: 1000, peak_mb: 64. Il costo è inferiore a quello delle ricette HTML perché non esistono né cascata né albero di layout. I font standard non vengono incorporati, mantenendo contenute le dimensioni dell’output.
Note sulla sicurezza
Sezione intitolata “Note sulla sicurezza”Il contenuto testuale viene renderizzato, non interpretato. Convalidare la lunghezza delle stringhe fornite dall’utente per contenere le dimensioni dell’output. Questo percorso non esegue alcuno script e non recupera alcuna risorsa remota.
Conformità
Sezione intitolata “Conformità”| Dichiarazione | Specifica | Clausola | reference_id |
|---|---|---|---|
| Le famiglie Helvetica, Times e Courier sono tra i 14 font Type 1 standard. | ISO 32000-2 | iso32000_2_sec9#x1.x29 | |
| Le famiglie standard-14 supportano l’intero set di caratteri latini (WinAnsiEncoding, Windows code page 1252). | ISO 32000-2 | Annex D.2 (iso32000_2_annexes#x1.x17.p4) | eb9220f88dfadad27a0be2206b64e68d8ea301d6d46e08142d43859c05fac6e4 |
| Le coordinate del testo si trovano nello spazio del testo e vengono mappate sullo spazio utente dalla matrice di testo. | ISO 32000-2 | iso32000_2_sec8#x1.x10.p2 |
Questa ricetta mostra come NextPDF compone testo con i font standard. La loro copertura dei glifi è l’intero repertorio WinAnsiEncoding (Windows-1252) — latino dell’Europa occidentale più la punteggiatura tipografica comune. Il testo in altri script richiede un tipo di carattere incorporato.
Contesto commerciale
Sezione intitolata “Contesto commerciale”Non applicabile.