Büyük bir HTML tablosunu sayfalara bölün
Bir bakışta
“Bir bakışta” başlıklı bölümBüyük bir <table>’ı writeHtml()’e geçirin. Motor bunu, satırların gerektirdiği kadar PDF sayfasına böler. <thead> her sayfanın üstünde yinelenir; böylece her sayfa eksiksiz bir tablo gibi işlev görür. Bu tarif, birkaç sayfaya yayılan 91 satırlık bir raporu işler. Tabloyu elle bölmez veya sayfa sonlarını hesaplamazsınız.
Kurulum
“Kurulum” başlıklı bölümcomposer require nextpdf/coreKavramsal genel bakış
“Kavramsal genel bakış” başlıklı bölümBir tablo tek bir sayfadan daha uzun olduğunda, onu tek bir <table> öğesi olarak tutun. Motor her satırı ölçer, kullanılabilir sayfa yüksekliğini doldurur, yeni bir sayfa açar ve aynı tabloyu sürdürür. <thead> satırlarını her devam sayfasının üstünde yeniden işler. Devam sayfaları belgenin üst ve alt kenar boşluklarını korur; böylece yeni sayfadaki ilk satır sayfa kenarından değil, üst kenar boşluğunun altından başlar.
Başlık hücrelerini <thead> içine, veri satırlarını da <tbody> içine yerleştirin. Yalnızca <thead> yinelenir. Her satırın bölünebilir kalmasını sağlayın. Kullanılabilir sayfa yüksekliğinden daha uzun tek bir satır sayfalar arasında bölünemez ve UnsplittableContentException fırlatır.
API yüzeyi
“API yüzeyi” başlıklı bölüm| Sembol | Konum | Rol |
|---|---|---|
Document::writeHtml(string $html): static | NextPDF\Core\Concerns\HasTextOutput | HTML’i işler ve tabloları gerektiği gibi sayfalara böler. |
Document::createStandalone(): self | NextPDF\Core\Document | Bağımsız bir belge oluşturur. |
Document::addPage(): static | NextPDF\Core\Document | İlk sayfayı açar ve sayfa boyutuyla kenar boşluklarını ayarlar. |
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\Core\Document;
$rows = '';for ($i = 1; $i <= 91; $i++) { $rows .= "<tr><td>{$i}</td><td>Item {$i}</td><td>In stock</td></tr>";}
$doc = Document::createStandalone();$doc->addPage();$doc->writeHtml( '<table>' . '<thead><tr><th>#</th><th>Name</th><th>Status</th></tr></thead>' . "<tbody>{$rows}</tbody>" . '</table>');$doc->save(__DIR__ . '/large-table.pdf');91 satır birkaç sayfaya yayılır ve #/Name/Status başlığı her sayfada yinelenir.
Kod örneği — üretim
“Kod örneği — üretim” başlıklı bölümBu bağımsız örnek başlığı biçimlendirir, satırları dönüşümlü renklendirir ve PDF’i test düzeneğinin sağladığı yola yazar.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$rows = '';for ($i = 1; $i <= 91; $i++) { $bg = $i % 2 === 0 ? '#F8FAFC' : '#FFFFFF'; $rows .= "<tr style=\"background-color: {$bg};\">" . "<td style=\"border: 1px solid #CBD5E1; padding: 4px;\">{$i}</td>" . "<td style=\"border: 1px solid #CBD5E1; padding: 4px;\">Item {$i}</td>" . "<td style=\"border: 1px solid #CBD5E1; padding: 4px;\">In stock</td>" . '</tr>';}
$html = <<<HTML<table style="width: 100%; border-collapse: collapse;"> <thead> <tr style="background-color: #1E3A8A; color: #FFFFFF;"> <th style="border: 1px solid #1E3A8A; padding: 6px;">#</th> <th style="border: 1px solid #1E3A8A; padding: 6px;">Name</th> <th style="border: 1px solid #1E3A8A; padding: 6px;">Status</th> </tr> </thead> <tbody>{$rows}</tbody></table>HTML;
$doc = Document::createStandalone();$doc->setTitle('Inventory report');$doc->addPage();$doc->writeHtml($html);
$out = getenv('NEXTPDF_OUT');$doc->save($out !== false ? $out : __DIR__ . '/paginate-large-html-tables.pdf');
echo "Wrote the paginated table PDF\n";Devam sayfası kenar boşlukları
“Devam sayfası kenar boşlukları” başlıklı bölümDevam sayfaları belgenin üst ve alt kenar boşluklarını kullanır. Sayfa sonundan sonra gelen ilk satır üst kenar boşluğunun altından başlar; sayfa sonundan önceki son satır ise alt kenar boşluğunun üstünde durur. Bu, uzun bir tablonun sayfa kenarına dayanıp kırpılmasını önler. Aynı kural, çok sayfalı bloklar ve çok sayfalı tablolar için de geçerlidir.
Sınır durumları ve tuzaklar
“Sınır durumları ve tuzaklar” başlıklı bölüm- Başarılı sayfalama uyarı üretmez. Bir tablo sayfalara temiz biçimde aktığında hiçbir uyarı üretmez. Motor,
TABLE_ROW_OVERFLOWuyarısını yalnızca yerleşimden ödün verilen durumlarda oluşturur: bir sayfa sonu alıcısı olmadığında veya bir satırın bir sayfanın başına alınması için yeniden konumlandırılması gerektiğinde. Uyarıyı başarısızlık olarak değil, tabloyu sadeleştirme sinyali olarak değerlendirin. - Başlığı
<thead>içine koyun. Yalnızca<thead>satırları yinelenir.<tbody>içine yerleştirilen bir başlık satırı yalnızca bir kez görünür. - Satırlar bölünebilir olmalıdır. Kullanılabilir sayfa yüksekliğinden daha uzun tek bir satır
UnsplittableContentExceptionfırlatır. O satırın içeriğini parçalara ayırın veya kısaltın. rowspansayfa sonunu aştığında sadeleştirilir. Bir sayfa sınırını aşan birrowspanhücresi parçalanır (ADR-007). Sayfalama boyunca bütünlüğünü koruması gereken gruplamalar için bunun yerine bir kategori başlığı satırı kullanın. Bkz. Desteklenmeyen CSS özellikleri.
Performans
“Performans” başlıklı bölümİşleme, satır sayısıyla doğrusal olarak ölçeklenir. Motor çıktıyı sayfa sayfa akıtır ve hiçbir zaman bellekte tam bir belge ağacı tutmaz; böylece uzun bir tablo için bellek kullanımı sayfa sayısıyla büyümez. Bu tarif için bütçe wall_ms: 2000, peak_mb: 96 şeklindedir.
Güvenlik notları
“Güvenlik notları” başlıklı bölümÇıktı boyutunun sınırlı kalması için kullanıcı tarafından sağlanan verilerin satır sayısını ve hücre uzunluğunu doğrulayın. Motor metni yorumlamak yerine işler ve hiçbir betik çalıştırmaz.
Uygunluk
“Uygunluk” başlıklı bölüm| İfade | Belirtim | Madde | reference_id |
|---|---|---|---|
| Bir tablo başlığı grubu, tablo bölündüğünde oluşan parçalanma kapsayıcıları boyunca yinelenir. | W3C CSS Tables 3 | css_tables_3#x1.x7.x2 | 53622ccb1bce2a0cc53bd70919fa4633a9376e2050f63a31a3fde9cb6595ec78 |
Ticari bağlam
“Ticari bağlam” başlıklı bölümUygulanamaz.
Ayrıca bkz.
“Ayrıca bkz.” başlıklı bölüm- HTML: HTML+CSS’ten PDF’e işleme alt sistemi — tek geçişli işleme ve sayfalama davranışı.
- HTML’de tablo yerleşimi — sütun boyutlandırma,
colspanve kenarlıklar. - Uzun HTML içeriğini sayfalara bölün — karışık blok içeriğinde sayfa sonları.
- CSS destek matrisi — tablolar ve sayfalama için destek durumu.