İçeriğe geç
getnextpdf.com

kararlılık: Deneysel

CJK dikey yazma desteği

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

Terminal window
composer require nextpdf/core:^3

Kompozitö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.

Dikey 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üm

Kompozitö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çin HTML_WRITING_MODE_LR_DEFERRED.
  • Kompoze edilemeyen bir vertical-rl çalışması için HTML_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.

Bu 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.
SimgeKonumRol
CssFeatureFlags::$layoutVerticalComposersrc/Html/CssFeatureFlags.phpDikey satır kompozitörü için katılımlı bayrak (varsayılan false).
CssFeatureFlags::$layoutVerticalLrsrc/Html/CssFeatureFlags.phpvertical-lr için kapı; kompoze etmek için her ikisi de açık olmalıdır.
Config::withCssFeatureFlags(CssFeatureFlags $flags): selfsrc/Core/Config.phpBayrak 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.

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

DocumentFactory 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);
  • Her iki bayrak da gereklidir. Kompozitör layoutVerticalLr ve layoutVerticalComposer öğelerine ihtiyaç duyar. Herhangi biri kapalıyken çalışma yatay işlenir.
  • Gerçek dikey ölçütler gereklidir. vhea/vmtx içermeyen bir yazı tipi kompozitörü süremez; çalışma yatay yerleşime ertelenir.
  • Erteleme gözlemlenebilirdir. Kompoze edilemeyen bir çalışma, bir reason ile birlikte HTML_WRITING_MODE_LR_DEFERRED / HTML_WRITING_MODE_RL_DEFERRED yayar. 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.

Kompozisyon, ç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.

Kompozitö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.

İfadeStandartMadde
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 #50Vertical 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.