kararlılık: Deneysel
CJK dikey yazma desteği
Bir bakışta
“Bir bakışta” başlıklı bölümKatılımlı önizleme. Dikey kompozitör varsayılan olarak kapalıdır. Kapalıyken motor, tam olarak öncekiyle aynı biçimde yatay işler — bayt düzeyinde özdeş. Bunu yalnızca gerçek dikey satırlara ihtiyaç duyan belgeler için açın ve sonucu doğrulayın.
HTML işleyicisi, writing-mode: vertical-lr ve writing-mode: vertical-rl CSS
yazma kipleri için gerçek bir dikey satır kompozitörü ekler. Kompozitör açık
olduğunda glifler, ISO 32000-2 §9.7.5 içindeki PDF dikey-yazma modelinin
tanımladığı gibi, yazı tipinin gerçek dikey ölçütlerinden (vhea ve vmtx
tabloları) alınan glif başına konumlandırmayla yukarıdan aşağıya istiflenir. Her
iki dikey blok-akış yönü de desteklenir.
Kurulum
“Kurulum” başlıklı bölümcomposer require nextpdf/core:^3Kompozitör core paketiyle birlikte gelir. CssFeatureFlags::$layoutVerticalComposer
katılımı @since 6.1.0 şeklindedir. Motor sürümü değişmez; özellik eklemelidir
ve varsayılan olarak kapalıdır.
Kavramsal genel bakış
“Kavramsal genel bakış” başlıklı bölümDikey kompozisyon yalnızca hem layoutVerticalLr hem de
layoutVerticalComposer ayarlandığında açılır. Bunlar açıkken bir vertical-lr
ya da vertical-rl çalışması gerçek bir dikey satır olarak kompoze edilir: her
glif, yazı tipinin vhea/vmtx ölçütlerinden gelen dikey ilerlemesiyle
yerleştirilir ve UAX #50’nin dik işaretlediği glifler dik tutulur. vertical-lr
sütunları soldan sağa yerleştirir; vertical-rl sütunları sağdan sola
yerleştirir.
Bu, CJK metni cmap-bilinçli kodlamayla ayarlama belgesinde belgelenen cmap-bilinçli kodlama cephesinden farklıdır; o cephe kodlama yolunu kanıtlar ama kendisi bir dikey yazma kipini sürmez. Bu sayfa, writing-mode katılımının etkinleştirdiği yerleşim tarafındaki kompozitörü belgeler.
Hata-durumunda-kapalı sınırı — ne zaman kompoze eder ve aksi durumda ne yapar
“Hata-durumunda-kapalı sınırı — ne zaman kompoze eder ve aksi durumda ne yapar” başlıklı bölümKompozitör tasarım gereği tutucudur. Bir çalışmayı dikey olarak yalnızca, çalışmadaki her glif gerçek dikey ölçütlere sahip biçimde UAX #50 dik olduğunda, çalışmanın içinde açık bir bağlantı bulunmadığında ve çalışma tek bir sütun olduğunda kompoze eder. Bunlardan biri sağlanmadığında — bayrak kapalı olduğunda ya da bir çalışma aslına uygun kompoze edilemediğinde — motor yatay yerleşime geri döner ve kiple eşleşen bir ertelenmiş tanılama yayar:
- Kompoze edilemeyen bir
vertical-lrçalışması içinHTML_WRITING_MODE_LR_DEFERRED. - Kompoze edilemeyen bir
vertical-rlçalışması içinHTML_WRITING_MODE_RL_DEFERRED.
Her tanılama bir reason taşır; böylece bir erteleme gözlemlenebilir ve
açıklanabilirdir, yazarın dikey ayarlamak istediği metnin asla sessiz bir yatay
işlenişi değildir.
Belgelenmiş sınırlar (sonraki dilimler)
“Belgelenmiş sınırlar (sonraki dilimler)” başlıklı bölümBu durumlar geçerli dilimin kapsamı dışındadır ve sonraki çalışmalar için izlenmektedir:
- Bir dikey çalışmanın içindeki döndürülmüş (dik olmayan) glifler.
- Çok sütunlu dikey kaydırma.
- Dikey bağlantı dikdörtgenleri (bir dikey çalışmanın içindeki bir bağlantı, çalışmayı erteler).
- Test derleminde paketlenmiş bir dikey-ölçütlü CJK yazı tipi düzeneği yoktur; bu nedenle görsel çapraz denetim, paketlenmiş bir altın örnekle savunulmak yerine izlenir.
API yüzeyi
“API yüzeyi” başlıklı bölüm| Simge | Konum | Rol |
|---|---|---|
CssFeatureFlags::$layoutVerticalComposer | src/Html/CssFeatureFlags.php | Dikey satır kompozitörü için katılımlı bayrak (varsayılan false). |
CssFeatureFlags::$layoutVerticalLr | src/Html/CssFeatureFlags.php | vertical-lr için kapı; kompoze etmek için her ikisi de açık olmalıdır. |
Config::withCssFeatureFlags(CssFeatureFlags $flags): self | src/Core/Config.php | Bayrak kümesini bir belge yapılandırmasına iliştirir. |
HTML_WRITING_MODE_LR_DEFERRED ve HTML_WRITING_MODE_RL_DEFERRED ertelenmiş
tanılama kodları, işleme sonucunun danışma kanalı üzerinden yüzeye çıkar.
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\Config;use NextPDF\Core\Document;use NextPDF\Html\Css\CssFeatureFlags;
$config = (new Config())->withCssFeatureFlags(new CssFeatureFlags( layoutVerticalLr: true, layoutVerticalComposer: true,));
$doc = Document::createStandalone($config);$doc->addPage();$doc->writeHtml( '<div style="writing-mode: vertical-rl; font-family: NotoSerifJP;">' . '日本語の縦書き' . '</div>',);$doc->save(__DIR__ . '/vertical.pdf');Aslına uygun kompoze edilemeyen bir çalışma yatay işlenir ve bir reason ile
birlikte bir HTML_WRITING_MODE_RL_DEFERRED danışmasını ekler. Dikey çıktıyı
nihai saymadan önce danışma kanalını denetleyin.
Kod örneği — üretim
“Kod örneği — üretim” başlıklı bölümDocumentFactory aracılığıyla gerçek dikey ölçütler taşıyan bir yazı tipini
kaydedin; böylece kompozitör vhea/vmtx okuyabilir, ardından belgeyi
kompozitöre dahil edin.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Config;use NextPDF\Core\DocumentFactory;use NextPDF\Graphics\ImageRegistry;use NextPDF\Html\Css\CssFeatureFlags;use NextPDF\Typography\FontRegistry;
$fontRegistry = new FontRegistry();$fontRegistry->register('/path/to/NotoSerifJP-Regular.otf', alias: 'NotoSerifJP');
$config = (new Config())->withCssFeatureFlags(new CssFeatureFlags( layoutVerticalLr: true, layoutVerticalComposer: true,));
$factory = new DocumentFactory($fontRegistry, new ImageRegistry(maxCacheBytes: 0));$doc = $factory->create($config);$doc->setLanguage('ja');$doc->addPage();$doc->writeHtml( '<div style="writing-mode: vertical-rl; font-family: NotoSerifJP;">' . '縦書きの本文。' . '</div>',);$doc->save($out);Sınır durumları ve dikkat edilmesi gerekenler
“Sınır durumları ve dikkat edilmesi gerekenler” başlıklı bölüm- Her iki bayrak da gereklidir. Kompozitör
layoutVerticalLrvelayoutVerticalComposeröğelerine ihtiyaç duyar. Herhangi biri kapalıyken çalışma yatay işlenir. - Gerçek dikey ölçütler gereklidir.
vhea/vmtxiçermeyen bir yazı tipi kompozitörü süremez; çalışma yatay yerleşime ertelenir. - Erteleme gözlemlenebilirdir. Kompoze edilemeyen bir çalışma, bir
reasonile birlikteHTML_WRITING_MODE_LR_DEFERRED/HTML_WRITING_MODE_RL_DEFERREDyayar. Asla sessizce yan döndürerek işlemez. - Bu yoldan hiçbir uygunluk iddiası gelmez. Dikey kompozisyon bir yerleşim yeteneğidir; üretilen dosya için bir PDF/UA-2 ya da PDF/A-4 uygunluk ifadesi değildir. Uygunluğa bir denetleyici karar verir.
Performans
“Performans” başlıklı bölümKompozisyon, çalışma boyunca glif başına bir dikey-ilerleme aramasını ekler; glif
sayısında doğrusaldır. Bütçe (wall_ms: 2000, peak_mb: 128) CJK profilini
izler; çünkü dikey-ölçütlü yazı tipleri büyüktür ve baskın maliyet, kompozisyon
geçişi değil yazı tipi işleme maliyetidir.
Güvenlik notları
“Güvenlik notları” başlıklı bölümKompozitör, dikey ölçütleri zaten kayıtlı, zaten doğrulanmış yazı tiplerinden okur. Yeni bir giriş kanalı açmaz. Yazı tipi dosyaları, tipografi katmanının mevcut doğrulamasınca işlenen güvenilmez ikili giriş olarak kalır. Kompoze edilen metin yorumlanmaz, işlenir.
Uygunluk
“Uygunluk” başlıklı bölüm| İfade | Standart | Madde |
|---|---|---|
| Dikey yazma, yerleştirme için CIDFont dikey glif ölçütlerini kullanır. | ISO 32000-2 | §9.7.5 |
writing-mode: vertical-lr / vertical-rl blok-akış yönünü ayarlar. | W3C CSS Writing Modes Level 3 | §3 |
| Glif başına dik yönelim, Unicode dikey-yönelim özelliğini izler. | Unicode UAX #50 | Vertical Orientation |
Bu, yukarıdaki belgelenmiş hata-durumunda-kapalı sınırlarıyla tek sütunlu dik dikey bir alt kümenin önizleme uygulamasıdır. NextPDF, bu yoldan gelen çıktının herhangi bir profile uygun olduğunu öne sürmez; buna bir denetleyici karar verir. Hiçbir standart metin olduğu gibi aktarılmaz.