Core / HasPages trait'i
Bir bakışta
“Bir bakışta” başlıklı bölümSayfaları HasPages concern trait’i yönetir. Sayfa eklemek, taşımak, kopyalamak ve silmek; kenar boşluklarını ayarlamak; imleci taşımak ve otomatik sayfa sonlarını denetlemek için bu trait’i kullanın.
Kurulum
“Kurulum” başlıklı bölümcomposer require nextpdf/core:^3Kavramsal genel bakış
“Kavramsal genel bakış” başlıklı bölümtrait HasPages (src/Core/Concerns/HasPages.php, 1.2.0 sürümünden beri), Document içine bileştirilir. Bir sayfa eklemek için:
- Önce
addPage(?PageSize $size = null, Orientation $orientation = Orientation::Portrait)çağırın. - İsteğe bağlı olarak
setMargins(Margin $margin)ya dasetLeftMargin(),setTopMargin(),setRightMargin()yöntemlerinden birini çağırın. - İçeriği yazın. İmleç, her yeni sayfada sol üst kenar boşluğu konumuna sıfırlanır.
Bir addPage() çağrısı yapıldığında, açık bir sayfa varsa o sayfa boşaltılır; istenen boyut ve yönlendirme uygulanır, imleç sol üst kenar boşluğuna sıfırlanır ve yapılandırılmış üst bilgi işlenir. Sayfa sayısı üst sınırı 10,000 sayfadır ve dahili bir Document sabitiyle belirlenir (private const MAX_PAGES, genel API’nin parçası değildir). Sınırı aşan bir çağrı PageLayoutException fırlatır. $size atlandığında, geçerli sayfa boyutu korunur. Yönlendirme, boyut üzerinde portrait() ya da landscape() çağrılarak uygulanır.
Koordinat modeli kullanıcı birimlerini kullanır; Y değeri sayfanın üstünden aşağı doğru artar. setX(), setY() ve setXY() imleci taşır. getX(), getY(), getPageWidth(), getPageHeight() ve getMargins() geçerli durumu okur. setAutoPageBreak(bool $enabled, float $margin = 20), içerik alt kenar boşluğu eşiğini aşacak şekilde taştığında bir sayfa sonunu etkinleştirir. Bundan sonraki içerik çağrısı, otomatik olarak yeni bir sayfa ekler.
Sayfa koleksiyonu yöntemleri — movePage(int $from, int $to), copyPage(int $index), deletePage(int $index) — belgedeki sayfalar üzerinde düzenleme yapar. startPageGroup() yeni bir sayfa numaralandırma grubu başlatır. getGroupPageNo() grup içindeki göreli numarayı döndürür. getPage() geçerli sıfır tabanlı dizini döndürür (sayfa yokken -1). getNumPages(), etkin ve henüz boşaltılmamış sayfa dahil toplam sayıyı döndürür.
Yazma katmanı, tutarlı Kids ve Count değerlerine sahip bir sayfa ağacı üretir (ISO 32000-2:2020 §7.7.3). Resources gibi öznitelikler, bir üst sayfa ağacı düğümünden devralınabilir (§7.7.3). Etiketli PDF modu etkin olduğunda, addPage() sayfa sonundan önce açık olan tüm işaretli içerik kapsamlarını kapatır. Bu kapsamları yeni sayfada yeni işaretli içerik tanımlayıcılarıyla (MCID’ler) yeniden açar; böylece her işaretli içerik başlangıcı (BDC) işleci, kendi sayfasında eşleşen bir işaretli içerik sonu (EMC) işlecine sahip olur (§14.6).
API yüzeyi
“API yüzeyi” başlıklı bölüm| Simge | Tür | Kararlılık | Sürümden beri |
|---|---|---|---|
addPage(?PageSize, Orientation): static | yöntem | kararlı | 1.2.0 |
setMargins(Margin): static | yöntem | kararlı | 1.2.0 |
setLeftMargin/setTopMargin/setRightMargin(float): static | yöntem | kararlı | 1.2.0 |
setAutoPageBreak(bool, float): static | yöntem | kararlı | 1.2.0 |
setX/setY/setXY(float[, float]): static | yöntem | kararlı | 1.2.0 |
getX/getY/getPageWidth/getPageHeight(): float | yöntem | kararlı | 1.2.0 |
getPage(): int / getNumPages(): int | yöntem | kararlı | 1.2.0 |
movePage/copyPage/deletePage(int): static | yöntem | kararlı | 1.2.0 |
startPageGroup(): static / getGroupPageNo(): int | yöntem | kararlı | 1.2.0 |
Kod örneği — hızlı başlangıç
“Kod örneği — hızlı başlangıç” başlıklı bölüm<?php
declare(strict_types=1);
require_once __DIR__ . '/../vendor/autoload.php';
use NextPDF\Contracts\Orientation;use NextPDF\Core\Document;use NextPDF\ValueObjects\{Margin, PageSize};
$doc = Document::createStandalone();$doc->setTitle('Page Setup Examples');$doc->setLanguage('en');
// Page 1: A4 portrait with custom margins$doc->addPage(PageSize::A4(), Orientation::Portrait);$doc->setMargins(new Margin(20.0, 15.0, 20.0, 15.0));$doc->setFont('helvetica', 'B', 16);$doc->cell(0, 12, 'Page 1: A4 Portrait', newLine: true);
// Page 2: Letter landscape$doc->addPage(PageSize::Letter(), Orientation::Landscape);$doc->setFont('helvetica', 'B', 16);$doc->cell(0, 12, 'Page 2: Letter Landscape', newLine: true);
$doc->save(__DIR__ . '/output/03-page-setup.pdf');Kaynak: examples/03-page-setup.php.
Kod örneği — üretim
“Kod örneği — üretim” başlıklı bölümsetAutoPageBreak(), içeriğin elle sayfa sonu eklemeden sayfalar arasında akmasını sağlar.
<?php
declare(strict_types=1);
require_once __DIR__ . '/../vendor/autoload.php';
use NextPDF\Core\Document;
$doc = Document::createStandalone();$doc->setTitle('Multi-Page Document');$doc->setAutoPageBreak(true, margin: 25);$doc->addPage();
$doc->setFont('helvetica', 'B', 18);$doc->cell(0, 12, 'Multi-Page Document Example', newLine: true);$doc->ln(5);
$doc->setFont('helvetica', '', 11);for ($chapter = 1; $chapter <= 3; $chapter++) { $doc->setFont('helvetica', 'B', 14); $doc->cell(0, 10, "Chapter {$chapter}: Lorem Ipsum", newLine: true); $doc->setFont('helvetica', '', 11); for ($para = 1; $para <= 5; $para++) { $doc->multiCell(0, 7, "Paragraph {$para} of Chapter {$chapter}. " . 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'); }}
$doc->save(__DIR__ . '/output/05-multi-page.pdf');Kaynak: examples/05-multi-page.php dosyasından uyarlanmıştır.
Sınır durumlar ve dikkat edilecek noktalar
“Sınır durumlar ve dikkat edilecek noktalar” başlıklı bölümgetNumPages(), henüz boşaltılmamış etkin sayfayı içerir; yalnızca tamamlanmış sayfaları saymaz.getPage(),-1döndürür; bu değer, ilkaddPage()çağrısından önce geçerlidir.- Bir
addPage()çağrısını dahili10,000sayfalık üst sınırın ötesinde yapmakPageLayoutExceptionfırlatır. - Kullanıcı koordinatlarında Y değeri aşağı doğru artar. Motor, bunu dahili olarak PDF’in yerel sol alt köşe başlangıç noktasına dönüştürür. Y değerini önceden kendiniz ters çevirmeyin.
- Tek kenar boşluğu ayarlayıcıları, diğer üç kenarı koruyarak
Margindeğer nesnesinin tamamını yeniden oluşturur. Kısmi değişiklik uygulanmaz. - Etiketli PDF modunda,
addPage()etkin etiket kapsamlarını yeni MCID’lerle yeniden açar. Bir MCID’nin sayfa sonundan sonra da varlığını sürdüreceğini varsaymayın.
Başarım
“Başarım” başlıklı bölümaddPage(), bir sayfa arabelleğini boşaltır ve O(sayfa içerik boyutu) zamanında yeni bir arabellek başlatır. Motor, içerikleriyle birlikte saklanan tam bir sayfa listesi yerine bir etkin sayfayı ve imleci tutar (ADR-001). movePage()/copyPage()/deletePage() boşaltılmış sayfa koleksiyonu üzerinde çalışır. Bütçe: standart hızlı başlangıç için 1500 ms / 64 MB.
Güvenlik notları
“Güvenlik notları” başlıklı bölümSayfa işlemleri, çağıranın sağladığı tamsayı dizinleri dışında dış girdi kullanmaz. PageManager, aralık dışı dizinleri doğrular. Bu trait’in güvenilmeyen bir ayrıştırma yolu yoktur.
Uygunluk
“Uygunluk” başlıklı bölüm| Sav | Kaynak | Madde | reference_id |
|---|---|---|---|
Sayfa ağacı, alt öğeleri Kids dizileri aracılığıyla bağlar | ISO 32000-2:2020 | §7.7.3 | |
Count, Kids dizisiyle tutarlı tutulur | ISO 32000-2:2020 | §7.7.3 | |
Resources, bir üst sayfa ağacı düğümünden devralınabilir | ISO 32000-2:2020 | §7.7.3 |
Maddeler özetlenmiştir; hiçbir normatif metin yeniden üretilmemiştir.
Ayrıca bakınız
“Ayrıca bakınız” başlıklı bölüm/modules/core/core/document-facade/— şu trait’i bileştiren facade:HasPages/modules/core/core/— Core’a genel bakış ve concern-trait modeli/modules/core/core/has-layout/—HasLayout: her çağrıda üst bilgiyi işleyenaddPage()/modules/core/core/has-text-output/—HasTextOutput:cell()imleci ilerletir/modules/core/layout/— sayfa sonu ve akış motorunu destekleyensetAutoPageBreak()/modules/core/valueobjects/—PageSize,Margin,Orientation; bu değer nesnelerini kullananaddPage()/modules/core/exception/— sayfa üst sınırını aşınca fırlatılanPageLayoutException