İçeriğe geç
getnextpdf.com

Metin, yazı tipleri ve sayfa temelleri

İlk öğreticide tek satırlık metin içeren bir sayfa işlediniz. Bu kez sayfanın kendisinin ve üzerindeki metnin kontrolünü ele alıyorsunuz. Bir sayfa boyutu seçecek, başlıklar ve paragraflar yazacak ve bunları motorun yerleşik yazı tipleriyle biçimlendireceksiniz.

İki küçük betik yazacaksınız. Her biri tek sayfalık bir Portable Document Format (PDF) dosyası üretir:

  • 01-text-basics.php, renkli bir başlık, sarmalanmış paragraflar ve üç hizalama örneği içeren A4 dikey bir sayfa işler.
  • 02-fonts.php, iki yerleşik yazı tipi ailesini çeşitli boyutlarda karşılaştıran bir örnek sayfası işler.

Her şey yalnızca nextpdf/core paketiyle çalışır. Hiçbir yazı tipi dosyasına, ek eklentiye veya ağ bağlantısına ihtiyacınız yoktur. Henüz kurulu bir projeniz yoksa önce ilk öğreticiyi takip edin ve geri dönün.

Her sayfanın bir boyutu ve bir yönü vardır. A4, yaygın uluslararası kağıt boyutudur; Letter ise Amerika Birleşik Devletleri’ndeki karşılığıdır. Yön ya dikey (düz duran) ya da yatay (yan yatık) olur. Bir sayfayı başlatırken her iki seçimi de addPage()’e geçirirsiniz.

Ardından yazma işini üç yöntem yapar. setFont(), sonraki metin için yazı tipini ve boyutu seçer. cell(), görünmez bir kutunun içine tek bir satır yazar. multiCell(), daha uzun metni gereken sayıda satıra sarmalar. Her iki yöntemde de 0 genişliği “sağ kenar boşluğuna kadar her şeyi kullan” anlamına gelir.

İki çağrı daha görünümü yönetir. setTextColor(), 0 ile 255 arasında kırmızı, yeşil ve mavi değerleri alır ve siz tekrar değiştirene kadar geçerli olur. Adlandırılmış seçeneklerden oluşan sabit bir liste olan Alignment enum’u Left, Center, Right ve Justify seçeneklerini sunar.

Proje klasörünüzde 01-text-basics.php dosyasını oluşturun:

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

Bunu php 01-text-basics.php ile çalıştırın. Betik Wrote out/text-basics.pdf yazdırır ve dosya yeni out/ klasöründe görünür.

addPage(PageSize::A4(), Orientation::Portrait), herhangi bir metin yazılmadan önce sayfayı oluşturdu. Bunun yerine Orientation::Landscape geçirin; aynı sayfa yan döner. PageSize::A5() veya PageSize::Letter() gibi diğer adlandırılmış boyutlar da aynı şekilde çalışır.

setFont('helvetica', 'B', 20), 20 puntoda kalın Helvetica’yı seçti. Punto (pt) geleneksel baskı birimidir; 72 punto bir inçe eşittir. cell() çağrısı başlığı yazdığında setTextColor(30, 64, 175) etkin olduğu için başlık mavidir. Sonraki setTextColor(0, 0, 0), kendisinden sonraki her şey için tekrar siyaha geçti.

İki multiCell() çağrısı paragraflarını otomatik olarak sarmaladı. İki yana yaslanmış olan, paragrafın son satırı dışında her iki kenarın da hizalanması için kelime aralığını genişletir. Bloklar arasında ln(), nefes alacak alan eklemek için yazma konumunu aşağı taşıdı. Son olarak save(), dosyayı oluşturup out/ içine yazdı.

Bu yöntemlerin kabul ettiği her parametre için bkz. Metni yazı tipleri ve hizalama ile oluşturun.

Motor, üç metin ailesini yerleşik olarak sunar: Helvetica, Times ve Courier. Helvetica, sans-serif bir yazı tipidir; yani harflerinin küçük uç çizgileri (serif) yoktur. Times, uzun ve baskı benzeri metinlerde iyi okunan serif bir yazı tipidir. Courier sabit genişliklidir, bu yüzden kod listelerine ve fişlere uygundur. Bu aileler yerleşik olduğu için betikleriniz hiçbir yazı tipi dosyasına ihtiyaç duymaz.

setFont()’un stil argümanı tek harfli bayrakları birleştirir: kalın için 'B', italik için 'I' ve altı çizili için 'U'. Boş bir dize normal anlamına gelir ve bayraklar birleşir, dolayısıyla 'BI' kalın italik verir.

Yerleşik aileler Latin tabanlı metni kapsar. Diğer yazı sistemleri veya kendi marka yazı tipiniz için, Yazı tiplerini gömün ve alt küme yapın tarifinde gösterildiği gibi bir yazı tipi dosyası kaydedersiniz (alt küme oluşturma, yalnızca gerçekten kullandığınız karakterleri saklayarak dosyaların küçük kalmasını sağlar). Yazı tipi destek matrisi, motorun kabul ettiği her yazı tipi biçimini listeler.

İlk betiğin yanında 02-fonts.php dosyasını oluşturun:

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

Bunu php 02-fonts.php ile çalıştırın ve out/font-sampler.pdf dosyasını açın. Aynı örnek cümlenin iki aile arasında karakter değiştirdiğini ve üç boyut boyunca büyüdüğünü görürsünüz.

Argümansız addPage(), dikey yönde varsayılan sayfa kurulumunu kullandı, böylece her betiğin boyutu açıkça belirtmesi gerekmez. Her setFont() çağrısı, sayfanın ortasında etkin aileyi, stili veya boyutu değiştirdi ve bir yazı tipi, sonraki setFont() çağrısına kadar etkin kalır.

Döngüler, setFont() ondalık bir sayı beklediği için boyutu (float) ile dönüştürür. Satır yükseklikleri yazı tipi boyutuyla ölçeklenir ($size * 0.8), böylece daha büyük metin daha yüksek satırlar alır ve hiçbir şey üst üste binmez. Üçüncü aileyi görmek için 'times' yerine 'courier' koymayı deneyin ve betiği tekrar çalıştırın.

  • Bir “class not found” veya otomatik yükleme hatası genellikle betiğin vendor/autoload.php dosyasını bulamadığı anlamına gelir. Betiği, vendor/ içeren proje klasörünün içinde çalıştırın.
  • Yanlış yazılmış bir aile adı, bulunamayan yazı tipini adıyla belirten bir istisna fırlatır. Yazımı kontrol edin: helvetica, times, courier.
  • Sorun giderme merkezi yaygın çözümleri toplar ve Yazı tipleri ve etiketleme, yazı tipi sorunlarını ayrıntılı olarak ele alır.
  • Her motor istisnası, taşıdığı bağlam ve kurtarma eylemiyle birlikte hata referansında belgelenmiştir.

Artık sayfaları şekillendirebilir, metni biçimlendirebilir ve yazı tiplerini bilinçli olarak seçebilirsiniz. Sonraki öğreticide sayfaya görseller yerleştirir ve içeriği tablolar ve listelerle düzenlersiniz.