İçeriğe geç

Yazı tipleri ve hizalamayla metin oluşturma

Metin yerleştirmek ve metnin yazı tipi ailesini, stilini, boyutunu ve hizalamasını denetlemek için bu tarifi kullanın. Üç yöntemden yararlanırsınız: setFont(), cell() ve multiCell(). Kod, examples/04-text-and-fonts.php dosyasını temel alır.

Terminal window
composer require nextpdf/core:^3

Bu komut, nextpdf/core paketini kurar. Örnek, PHP 8.4 gerektirir.

setFont($family, $style, $size), sonraki metin çağrısı için etkin yazı tipi yüzünü seçer. $style bağımsız değişkeni üç bayrağı birleştirir: B (kalın), I (italik) ve U (altı çizili). U bayrağı metin süslemesi uygular; diğer bayraklar yazı tipi varyantını seçer. Helvetica, Times ve Courier aileleri, ISO 32000-2’de belirtilen 14 standart Type 1 yazı tipine çözümlenir. Bir uygunluk profili bunu geçersiz kılabilir ve gömülü bir yedek yazı tipi gerektirebilir.

cell(), bir kutuya tek satır yazar. multiCell(), sözcükleri belirttiğiniz genişlik ve satır yüksekliğine göre bir sütunda kaydırır. Metin, metin uzayında başlar ve metin matrisi metin uzayını kullanıcı uzayına eşler (ISO 32000-2). Kullanıcı birimleriyle çalışırsınız; matrisi sizin adınıza motor oluşturur.

Hizalamayı Alignment enum’u ile ayarlayın: Left, Center, Right, Justify. multiCell() için iki yana yaslama, sözcük aralığını satırın geneline dağıtır.

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

Tam PHPDoc tablosu kaynak koddan üretilir.

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

Bu örnek bağımsız çalışır; bu nedenle test çerçevesi onu çalıştırabilir. examples/04-text-and-fonts.php dosyasını yansıtır ve stil varyantlarını, farklı boyutları, sözcük kaydırmalı iki yana yaslanmış metni ve üç hizalamayı gösterir.

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

Beklenen STDOUT:

Wrote compose-text-and-fonts.pdf
  • Genişlik 0, kalan genişlik anlamına gelir. 0 değerini geçtiğinizde, cell(0, ...) ve multiCell(0, ...) sağ kenar boşluğuna kadar olan alanı kullanır. Sabit genişlikli bir kutu için belirli bir genişlik geçin.
  • Stil dizesinin sırası. 'BI' ve 'IB', ayrıştırıcı bayrak sırasını yok saydığı için aynı kalın-italik varyantını seçer. 'U' bayrağı bir süsleme bayrağıdır, yazı tipi varyantı değildir.
  • Standart yazı tiplerinin glif kapsamı. 14 standart yazı tipi, tam WinAnsiEncoding (Windows-1252) repertuvarını işler. Bu, Batı Avrupa aksanlı Latin’i, Euro işaretini ve yaygın tipografik noktalamayı kapsar — en ve em tireleri, kıvrık tırnaklar, madde imi, üç nokta ve ticari marka işareti. Çince, Japonca, Korece, Arapça, İbranice, Yunanca, Kiril veya Tayca gibi bu kümenin dışındaki yazı sistemleri için bir TrueType yüzü kaydedin ve seçin. Yazı tiplerini gömme ve alt kümeleme bölümüne bakın.
  • Satır yüksekliği ile yazı tipi boyutu ilişkisi. multiCell() için satır başına yükseklik, yazı tipi boyutu ile metrik profilinin varsayılan satır yüksekliği oranının çarpımıdır. Yükseklik çok küçükse satırlar çakışabilir.
  • Son satırda iki yana yaslama. multiCell() ile iki yana yaslama, bir paragrafın son satırını germez. Bu, geleneksel dizgi uygulamasıyla uyumludur.

Metin üretimi, glif sayısına göre doğrusaldır, O(n). Bütçe wall_ms: 1000, peak_mb: 64 olarak belirlenmiştir. Bir basamaklandırma veya yerleşim ağacı bulunmadığından maliyeti, HyperText Markup Language (HTML) tariflerine göre daha düşüktür. Standart yazı tipleri gömülmez; bu da çıktıyı küçük tutar.

Metin içeriği işlenir, yorumlanmaz. Çıktı boyutunu sınırlı tutmak için kullanıcı tarafından sağlanan dizelerin uzunluğunu doğrulayın. Bu yol, hiçbir betik çalıştırmaz ve hiçbir uzak kaynağı getirmez.

İfadeBelirtimMaddereference_id
Helvetica, Times ve Courier aileleri, 14 standart Type 1 yazı tipi arasındadır.ISO 32000-2iso32000_2_sec9#x1.x29
Standart-14 aileleri, tam Latin karakter kümesini (WinAnsiEncoding, Windows kod sayfası 1252) destekler.ISO 32000-2Annex D.2 (iso32000_2_annexes#x1.x17.p4)eb9220f88dfadad27a0be2206b64e68d8ea301d6d46e08142d43859c05fac6e4
Metin koordinatları metin uzayındadır ve metin matrisi tarafından kullanıcı uzayına eşlenir.ISO 32000-2iso32000_2_sec8#x1.x10.p2

Bu tarif, NextPDF’in standart yazı tipleriyle metni nasıl oluşturduğunu gösterir. Bu yazı tiplerinin glif kapsamı, tam WinAnsiEncoding (Windows-1252) repertuvarıdır — Batı Avrupa Latin’i ile yaygın tipografik noktalama. Diğer yazı sistemlerindeki metin, gömülü bir yüz gerektirir.

Uygulanamaz.