HTML'i CSS ile biçimlendirme
Bir bakışta
“Bir bakışta” başlıklı bölümBu tarifte, Hypertext Markup Language (HTML) içeriğine Cascading Style Sheets (CSS) uygulanır. Satır içi style öznitelikleri ve bir <style> bloğu kullanılır. Ayrıca bir özelliğe güvenmeden önce desteğinin doğrulanmış olduğunu nasıl teyit edeceğinizi de öğrenirsiniz.
Kurulum
“Kurulum” başlıklı bölümcomposer require nextpdf/core:^3Bu sürüm kısıtını nextpdf/core paketi için kullanın. Örnek, PHP 8.4 üzerinde çalışır.
Kavramsal genel bakış
“Kavramsal genel bakış” başlıklı bölümHTML motoru, stilleri CSS basamaklaması üzerinden çözümler. Birden çok kural aynı öğeyi hedeflediğinde hangi stilin geçerli olacağına basamaklama karar verir. Motor, önce giriş <style> bloğunu, ardından satır içi style özniteliklerini okur. İkisini de öğelerle eşleştirir ve sonucu basamaklama sırasına göre hesaplar. Destek matrisi, CSS Cascading and Inheritance modülünü Verified olarak derecelendirir; bu, basamaklama ve kalıtım davranışının özel bir fikstür paketi tarafından kapsandığı anlamına gelir.
Metin sunum özellikleri (örneğin text-align, text-indent ve letter-spacing), World Wide Web Consortium (W3C) CSS Text modülü özellik tablosunda tanımlanır (W3C CSS Text Level 3). Yazı tipi seçimi, CSS Fonts modeline dayanır. font kısaltması, font-style, font-variant, font-weight, font-size ve font-family özelliklerini birlikte ayarlar (W3C CSS Fonts Level 3).
Destek, W3C modülü temelinde izlenir ve doğruluk denetiminden geçirilir. Bir özellik uygulanmış olsa da ona özel bir modül fikstüründen yoksun olabilir; bu durumda “Verified” değil, “Claimed” olarak derecelendirilir. “Claimed” değerini azami çaba olarak değerlendirin ve görsel sonucu kendi içeriğiniz için doğrulayın. “Verified” değerini, başarılı bir fikstür paketiyle desteklenmiş olarak değerlendirin.
API yüzeyi
“API yüzeyi” başlıklı bölümBiçimlendirmeyi, writeHtml(string $html): static metoduna ilettiğiniz HTML aracılığıyla denetlersiniz (NextPDF\Core\Concerns\HasTextOutput). CSS için ayrı bir application programming interface (API) sunulmaz; basamaklama dahili olarak çalışır. Tam PHPDoc tablosu, kaynaktan üretilir.
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;
$doc = Document::createStandalone();$doc->addPage();
$doc->writeHtml( '<style>.lead { color: #1E3A8A; text-align: center; }</style>' . '<p class="lead">Styled with a style block.</p>');
$doc->save(__DIR__ . '/out.pdf');Kod örneği — üretim
“Kod örneği — üretim” başlıklı bölümBu bağımsız örnek, çalışma ortamında çalıştırılabilir. Bir <style> bloğunu, sınıf seçicilerini, satır içi stilleri ve font ailesi ile kalınlık yolunu sınar.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$doc = Document::createStandalone();$doc->setTitle('CSS Styling');$doc->addPage();
$html = <<<'HTML'<style> h1 { color: #1E3A8A; } .lead { color: #D97706; font-size: 14px; } .callout { background-color: #EFF6FF; padding: 8px; border: 1px solid #BFDBFE; } .centered { text-align: center; }</style>
<h1>Styling HTML with CSS</h1>
<p class="lead">This paragraph is styled through a class selector in astyle block.</p>
<p class="callout">This paragraph has a background, padding, and a borderfrom a class selector.</p>
<p class="centered" style="font-weight: bold;">Centered, with an inlineoverride for weight.</p>
<p style="color: #6B7280; font-size: 9px;">Inline style only.</p>HTML;
$doc->writeHtml($html);
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT');$doc->save($out !== false ? $out : __DIR__ . '/style-with-css.pdf');
echo "Wrote style-with-css.pdf\n";Beklenen standart çıktı (STDOUT):
Wrote style-with-css.pdfUç durumlar ve tuzaklar
“Uç durumlar ve tuzaklar” başlıklı bölüm- Basamaklama sırası. Basamaklamada, eşit özgüllüğe sahip satır içi bir
style, bir<style>bloğu seçicisine üstün gelir. Beklenmedik bir renk görürseniz, önce satır içi bir geçersiz kılma olup olmadığını denetleyin. - Claimed - Verified karşılaştırması.
text-align,text-indentvecolor, matriste “Claimed” olarak derecelendirilir. Bunlar uygulanmıştır, ancak özel modül fikstürleri yoktur. İşlenirler, ancak üretim onayından önce görsel çıktıyı doğrulamanız gerekir. - Saklanan ağaç yok. Architecture Decision Record (ADR-001)‘de açıklanan akış motoru hiçbir belge ağacı tutmaz; bu nedenle, sonraki bir kardeş öğenin önceki bir öğeyi yeniden biçimlendirdiği bir seçiciyi uygulayamaz. Sonuç olarak, sıradan bağımsız seçiciler kısıtlanmıştır.
- Desteklenmeyen özellik. Desteklenmeyen bir özellik hata olarak bildirilmez; yok sayılır. Bu özelliğe güvenmeden önce matrisi denetleyin.
- Renk uzayları. Lab, LCH ve OKLab değerleri ayrıştırılır, ancak bu işlevler için Portable Document Format (PDF)‘de renk uzayı sadakati iddia edilmez (matris: CSS Color 4 için “Claimed”).
Performans
“Performans” başlıklı bölümBasamaklama çözümlemesi tek geçişte gerçekleşir. Maliyet, belirteç sayısına göre doğrusal kalır: O(n). Bütçe değeri wall_ms: 1500, peak_mb: 96 şeklindedir. Bir <style> bloğu, kural sayısıyla orantılı tek seferlik bir seçici ayrıştırma maliyeti ekler.
CSS destek matrisi alıntısı (yalnızca Verified satırları)
“CSS destek matrisi alıntısı (yalnızca Verified satırları)” başlıklı bölümBu alıntı, yalnızca Verified satırlarını, doğruluk denetiminden geçmiş CSS destek matrisinden gösterir.
| W3C modülü | Düzey | Durum | Kanıt |
|---|---|---|---|
CSS Cascading and Inheritance (css_cascade_3) | 3 | Verified | src/Html/Cascade/, tests/Unit/Html/Cascade/ |
CSS Cascading (css_cascade_4) | 4 | Verified | Cascade/Layer/ + revert/layer testleri |
CSS Cascading (css_cascade_5) | 5 | Verified | AtRule/Layer/ + Cascade/Layer/ paketleri |
CSS Fonts (css_fonts_3) | 3 | Verified | src/Html/Font/, tests/Unit/Font/ + FontResolver testleri |
CSS Fonts (css_fonts_4) | 4 | Verified | src/Html/FontFace/, tests/Unit/Html/FontFace/ |
text-align, text-indent, color ve background-color, matriste “Claimed” değerindedir. Tablo, bunları Verified satırlarının dışında bilinçli olarak bırakır.
Tek geçişli akış kısıtlamaları (ADR-001)
“Tek geçişli akış kısıtlamaları (ADR-001)” başlıklı bölümBasamaklama, Document Object Model (DOM) bulunmayan, akışla aktarılan bir belirteç listesi üzerinde çalışır; bu nedenle seçiciler, belge sırası bağlamına göre çözümlenir. Tam ağaç seçici durumları ADR-006 uyarınca kısıtlanmıştır. Yalnızca belge sırasına ve üst öğe bağlamına dayanan CSS yazın.
Katman sözleşmeleri (ADR-010)
“Katman sözleşmeleri (ADR-010)” başlıklı bölümCSS ayrıştırma, basamaklama katmanına aittir ve yerleşim dağıtımı, ham $css[...] değerlerini doğrudan okumamalıdır. Genel yüzey HTML girişidir. Hesaplanmış stilleri basamaklamadan sonra enjekte etmenin desteklenen bir yolu yoktur.
Büyük belgeler için bellek bütçesi
“Büyük belgeler için bellek bütçesi” başlıklı bölümBasamaklama, bir düğüm ağacını değil, etkin kural kümesini ve ekleme ile çıkarma stil yığınını tutar. Kapsayıcı kapsamındaki bağlamlar, ADR-020 bütçesine uyar (bağlam başına 5,000 düğüm, 50 MB etkin üst sınır). Büyük stil sayfaları, kural kümesi belleğini doğrusal olarak büyütür; bu nedenle seçici sayılarını sınırlı tutun.
Güvenlik notları
“Güvenlik notları” başlıklı bölümGüvenilmeyen HTML içindeki CSS kod çalıştıramaz, ancak yerleşimi ve background-image gibi kaynak referanslarını etkileyebilir. Varsayılan dış kaynak ilkesi, rastgele uzak URL’leri getirmez. Kullanıcı girişinden oluşturduğunuz tüm HTML ve CSS’yi işlemeden önce temizleyin.
Uygunluk
“Uygunluk” başlıklı bölüm| Beyan | Spesifikasyon | Madde | reference_id |
|---|---|---|---|
| Metin özellikleri (text-align, text-indent, letter-spacing), CSS Text özellik tablosunda tanımlanır. | W3C CSS Text Level 3 | css_text_3#x1.x24 | |
| font kısaltması; font-style, font-variant, font-weight, font-size ve font-family özelliklerini ayarlar. | W3C CSS Fonts Level 3 | css_fonts_3#x2.x6.x7.p2 |
Bu tarif, NextPDF’in desteklenen bir CSS alt kümesini nasıl uyguladığını gösterir; tam CSS desteği iddia etmez. Modül bazında doğrulanmış durum için CSS destek matrisine bakın.
Ticari bağlam
“Ticari bağlam” başlıklı bölümUygulanamaz.