İçeriğe geç

Core / HasPages trait'i

Sayfaları 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.

Terminal window
composer require nextpdf/core:^3

trait HasPages (src/Core/Concerns/HasPages.php, 1.2.0 sürümünden beri), Document içine bileştirilir. Bir sayfa eklemek için:

  1. Önce addPage(?PageSize $size = null, Orientation $orientation = Orientation::Portrait) çağırın.
  2. İsteğe bağlı olarak setMargins(Margin $margin) ya da setLeftMargin(), setTopMargin(), setRightMargin() yöntemlerinden birini çağırın.
  3. İç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).

SimgeTürKararlılıkSürümden beri
addPage(?PageSize, Orientation): staticyöntemkararlı1.2.0
setMargins(Margin): staticyöntemkararlı1.2.0
setLeftMargin/setTopMargin/setRightMargin(float): staticyöntemkararlı1.2.0
setAutoPageBreak(bool, float): staticyöntemkararlı1.2.0
setX/setY/setXY(float[, float]): staticyöntemkararlı1.2.0
getX/getY/getPageWidth/getPageHeight(): floatyöntemkararlı1.2.0
getPage(): int / getNumPages(): intyöntemkararlı1.2.0
movePage/copyPage/deletePage(int): staticyöntemkararlı1.2.0
startPageGroup(): static / getGroupPageNo(): intyöntemkararlı1.2.0
<?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.

setAutoPageBreak(), 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.

  • getNumPages(), henüz boşaltılmamış etkin sayfayı içerir; yalnızca tamamlanmış sayfaları saymaz.
  • getPage(), -1 döndürür; bu değer, ilk addPage() çağrısından önce geçerlidir.
  • Bir addPage() çağrısını dahili 10,000 sayfalık üst sınırın ötesinde yapmak PageLayoutException fı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 Margin değ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.

addPage(), 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.

Sayfa 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.

SavKaynakMaddereference_id
Sayfa ağacı, alt öğeleri Kids dizileri aracılığıyla bağlarISO 32000-2:2020§7.7.3
Count, Kids dizisiyle tutarlı tutulurISO 32000-2:2020§7.7.3
Resources, bir üst sayfa ağacı düğümünden devralınabilirISO 32000-2:2020§7.7.3

Maddeler özetlenmiştir; hiçbir normatif metin yeniden üretilmemiştir.