Üst bilgiler, alt bilgiler ve çok sayfalı belgeler
Tek bir sayfa nadiren yeterli olur. Bu eğitimde, kendi kendine üç sayfaya büyüyen bir belge yazarsınız. Ayrıca her sayfaya tekrar eden bir üst bilgi ve sayfa numarasını gösteren bir alt bilgi eklersiniz.
Ne oluşturacaksınız
“Ne oluşturacaksınız” başlıklı bölümTek bir betik yazacaksınız: 01-multipage.php. Bu betik, üç sayfalık bir
seyahat günlüğünü PDF (Portable Document Format) dosyası olarak üretir:
- Günlük girişleri sayfadan sayfaya otomatik olarak akar. Bir sayfanın nerede biteceğini asla siz belirtmezsiniz; buna motor karar verir.
- Üst bilgi, bir sayfanın üstünde yer alan ve her sayfada tekrar eden bir şerittir. Sizinki belge başlığını gösterir.
- Alt bilgi, sayfanın altında yer alan, buna karşılık gelen şerittir. Sizinki sayfa
numarasını
1 / 3,2 / 3ve3 / 3şeklinde gösterir.
Her şey yalnızca nextpdf/core paketiyle çalışır: yazı tipi dosyası yok, ek
uzantı yok ve ağ bağlantısı yok.
Adım 1: Üç sayfalık günlüğü oluşturun
“Adım 1: Üç sayfalık günlüğü oluşturun” başlıklı bölümBu betikteki tüm işi iki fikir yapar.
Birincisi otomatik sayfa sonudur. Motor metni yazarken bir imleç izler:
sayfada bir sonraki satırın yerleşeceği nokta. setAutoPageBreak(true, margin: 25),
motora bu imleci izlemesini söyler. İmleç alt kenara 25 punto (yaklaşık bir inçin
üçte biri) kaldığında motor sayfayı kapatır ve
yenisini başlatır.
İkincisi sayfa mobilyasıdır: üst bilgi ve alt bilgi. Bunları ilk sayfadan önce
bir kez tanımlarsınız. setHeaderData(), üstteki şerit için başlığı ve kısa bir
açıklamayı kaydeder. Yazı tipi ve kenar boşluğu çağrıları, harfleri ve sayfa
kenarına olan uzaklığı seçer. Motor daha sonra bu mobilyayı, kendi eklediği
sayfalar dahil olmak üzere oluşturduğu her sayfaya çizer.
Proje klasörünüzde 01-multipage.php dosyasını oluşturun:
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
// Make sure the output folder exists next to this script.@mkdir(__DIR__ . '/out');
$document = Document::createStandalone();$document->setTitle('NextPDF Travel Journal');
// Configure the header and footer BEFORE the first page.// The engine repeats them on every page for you.$document->setHeaderData(title: 'NextPDF Travel Journal', description: 'A multi-page tutorial document');$document->setHeaderFont('helvetica', 10);$document->setHeaderMargin(5);$document->setFooterFont('helvetica', 8);$document->setFooterMargin(10);
// Turn on automatic page breaks. When the text cursor gets within// 25 points of the bottom edge, the engine starts a new page.$document->setAutoPageBreak(true, margin: 25);
$document->addPage();
$document->setFont('helvetica', 'B', 18);$document->cell(0, 12, 'Travel journal: three days on the coast', newLine: true);$document->ln(5);
$days = [ 1 => 'We followed the shoreline north and counted seventeen lighthouses.', 2 => 'Rain moved in before noon, so we sketched the harbor from a cafe window.', 3 => 'On the last morning the fog lifted and the whole bay turned silver.',];
foreach ($days as $day => $highlight) { $document->setFont('helvetica', 'B', 14); $document->cell(0, 10, "Day {$day}", newLine: true);
$document->setFont('helvetica', '', 11); for ($entry = 1; $entry <= 12; $entry++) { $text = "Entry {$entry} of day {$day}. {$highlight} " . 'The trail hugged the cliffs for most of the afternoon, and every ' . 'turn opened another view of the water. We stopped often to take ' . 'notes, compare maps, and argue happily about where to eat dinner. ' . 'By the time we reached the guesthouse, our boots were soaked and ' . 'our notebooks were full.'; $document->multiCell(0, 7, $text); $document->ln(3); } $document->ln(5);}
// Ask the engine how many pages the layout produced, then save.$pages = $document->getNumPages();$document->save(__DIR__ . '/out/travel-journal.pdf');
echo "Wrote out/travel-journal.pdf with {$pages} pages\n";Bunu php 01-multipage.php ile çalıştırın. Betik tek bir satır yazdırır:
Wrote out/travel-journal.pdf with 3 pagesout/travel-journal.pdf dosyasını açın ve baştan sona kaydırın. Başlık şeridi
üç sayfanın da üstünde yer alır ve sayfa numaraları sağ altta giderek artar.
Az önce ne oldu
“Az önce ne oldu” başlıklı bölümYazma döngüsü sayfalardan hiç söz etmez. Her gün başlığını, görünmez bir kutuya
tek bir satır yerleştiren cell() ile yazar. Girişleri ise uzun metni gerektiği
kadar satıra saran multiCell() ile yazar. Otuz altı giriş tek bir sayfaya
sığmadığından otomatik sayfa sonu iki kez tetiklenir. Günlük işte böyle tam
olarak üç sayfaya ulaşır.
Üst bilgi ve alt bilgi, ilk addPage() çağrısından önce yapılandırıldı. Bu sıra
önemlidir: zaten çizilmiş olan bir sayfa sonradan güncellenmez. Önce mobilyayı
yapılandırın; böylece her sayfa tutarlı çıkar.
Sayfa numarasını hiç siz çizmediniz. Alt bilgi bunu varsayılan olarak yazdırır; siz yalnızca yazı tipini ve sayfa kenarına olan uzaklığını seçtiniz. Motor sayfaları yazarken son sayıyı henüz bilemez. Bu nedenle her alt bilgiye bir yer tutucu bırakır ve gerçek toplamı, siz kaydettiğinizde doldurur.
İki küçük ayrıntı betiği tamamlar. @mkdir, out klasörünü oluşturur ve @
işareti, klasör zaten mevcut olduğunda PHP’yi sessiz tutar. getNumPages(),
düzenin kaç sayfa ürettiğini motora sorar; böylece son mesaj gerçek sayıyı
bildirebilir.
Bir şeyler ters gittiyse
“Bir şeyler ters gittiyse” başlıklı bölümrequiresatırındaki bir “failed to open stream” hatası, betiğinvendor/autoload.phpdosyasını bulamadığı anlamına gelir. Betiği,vendor/klasörünü içeren proje klasörünün içinde çalıştırın.- Her şey tek bir sayfada duruyor ve metnin sonu kesiliyor mu? O hâlde otomatik
sayfa sonları kapalıdır.
setAutoPageBreak(true, margin: 25)satırını koruyun ve onu yazma döngüsünün üstünde tutun. - Yanlış yazılmış bir yazı tipi ailesi, bulamadığı yazı tipini adıyla belirten
bir istisna fırlatır.
helveticayazımını kontrol edin ve daha derin yazı tipi sorunları için Yazı tipleri ve etiketleme sayfasına bakın. - Diğer her şey için, sorun giderme merkezi belirtileri nedenlerle eşleştirir ve hata başvurusu motorun genel istisnalarını ve her birinden nasıl kurtulacağınızı açıklar.
Sıradaki
“Sıradaki” başlıklı bölümBelgeleriniz artık istediğiniz uzunluğa büyüyebilir ve yine de tamamlanmış görünür. Sonraki eğitimde içeriğinizi HTML (Hypertext Markup Language) ile yazarsınız ve motorun bunu sayfalara dönüştürmesine izin verirsiniz.
Bugünkü konular üzerinde daha ince denetim istediğinizde, iki tarif daha derine iner:
- Çok sayfalı bir belge oluşturun uç durumları dahil olmak üzere sayfa sonlarını ayrıntılı olarak ele alır.
- Tekrar eden sayfa üst bilgileri ve alt bilgileri ekleyin bunları kapatma dahil olmak üzere her üst bilgi ve alt bilgi ayarını adım adım anlatır.