الاستقرار: تجريبي
دعم الكتابة العمودية لنصوص CJK
لمحة سريعة
قسم بعنوان «لمحة سريعة»معاينة اختيارية. المُؤلِّف العمودي مُعطَّل افتراضيًا. عندما يكون مُعطَّلًا، يُصيِّر المحرّك أفقيًا تمامًا كما كان من قبل — متطابق بايتًا ببايت. فعِّله فقط للمستندات التي تحتاج إلى سطور عمودية حقيقية، وتحقّق من النتيجة.
يُضيف مُصيِّر HTML مُؤلِّف سطور عمودي حقيقي لنمطَي الكتابة في CSS
writing-mode: vertical-lr وwriting-mode: vertical-rl. عندما يكون المُؤلِّف
مُفعَّلًا، تُكدَّس المحارف من الأعلى إلى الأسفل مع وضع لكل محرف مأخوذ من مقاييس
الخط العمودية الحقيقية (جدولَا vhea وvmtx)، كما يصف نموذج الكتابة العمودية
في PDF بـ ISO 32000-2 §9.7.5. ويُدعَم كلا اتجاهَي تدفّق الكتل العموديَّين.
التثبيت
قسم بعنوان «التثبيت»composer require nextpdf/core:^3يُشحَن المُؤلِّف في حزمة core. الخيار الاختياري CssFeatureFlags::$layoutVerticalComposer
هو @since 6.1.0. ونسخة المحرّك لم تتغيّر؛ فالميزة
إضافية ومُعطَّلة افتراضيًا.
نظرة عامة مفاهيمية
قسم بعنوان «نظرة عامة مفاهيمية»يُفعَّل التأليف العمودي فقط عندما يُضبَط كلٌّ من layoutVerticalLr و
layoutVerticalComposer. ومعهما مُفعَّلَين، يُؤلَّف مقطع vertical-lr أو vertical-rl
كسطر عمودي حقيقي: يُوضَع كل محرف بتقدّمه العمودي من مقاييس
vhea/vmtx للخط، وتُبقى المحارف التي يُعلِّمها UAX #50 منتصبةً
منتصبة. ويُخطّط vertical-lr الأعمدة من اليسار إلى اليمين؛
ويُخطّط vertical-rl الأعمدة من اليمين إلى اليسار.
يختلف هذا عن واجهة الترميز المراعية لـ cmap المُوثَّقة في ضبط نص CJK بترميز يراعي cmap، التي تُثبت مسار الترميز لكنها لا تُحرِّك بذاتها نمط كتابة عمودي. تُوثِّق هذه الصفحة مُؤلِّف الجانب التخطيطي الذي يُفعِّله الخيار الاختياري لنمط الكتابة.
حدّ الإغلاق الآمن — متى يُؤلِّف، وماذا يفعل غير ذلك
قسم بعنوان «حدّ الإغلاق الآمن — متى يُؤلِّف، وماذا يفعل غير ذلك»المُؤلِّف محافظ بحكم التصميم. يُؤلِّف مقطعًا عموديًا فقط عندما يكون كل محرف في المقطع منتصبًا وفق UAX #50 بمقاييس عمودية حقيقية، ولا يوجد رابط مفتوح داخل المقطع، والمقطع عمود واحد. وعندما لا يتحقّق أيٌّ من ذلك — العَلَم مُعطَّل، أو مقطع لا يمكن تأليفه بأمانة — يرتدّ المحرّك إلى التخطيط الأفقي ويُصدر تشخيص تأجيل مطابقًا للنمط:
HTML_WRITING_MODE_LR_DEFERREDلمقطعvertical-lrتعذّر تأليفه.HTML_WRITING_MODE_RL_DEFERREDلمقطعvertical-rlتعذّر تأليفه.
يحمل كل تشخيص reason، فيكون التأجيل قابلًا للملاحظة وللتفسير،
لا تصييرًا أفقيًا صامتًا لنص أراد المؤلِّف ضبطه عموديًا.
الحدود المُوثَّقة (شرائح لاحقة)
قسم بعنوان «الحدود المُوثَّقة (شرائح لاحقة)»هذه الحالات خارج نطاق الشريحة الحالية وتُتتبَّع لعمل لاحق:
- المحارف المُدوَّرة (غير المنتصبة) داخل مقطع عمودي.
- الالتفاف العمودي متعدّد الأعمدة.
- مستطيلات الروابط العمودية (رابط داخل مقطع عمودي يُؤجِّل المقطع).
- لا يوجد ملحق خط CJK بمقاييس عمودية في مجموعة الاختبار، لذا يُتتبَّع التحقّق البصري المتقاطع بدلًا من تأكيده بملف ذهبي مُلحَق.
سطح الـ API
قسم بعنوان «سطح الـ API»| الرمز | الموقع | الدور |
|---|---|---|
CssFeatureFlags::$layoutVerticalComposer | src/Html/CssFeatureFlags.php | عَلَم اختياري لمُؤلِّف السطور العمودي (الافتراضي false). |
CssFeatureFlags::$layoutVerticalLr | src/Html/CssFeatureFlags.php | بوّابة لـ vertical-lr؛ يجب أن يكون كلاهما مُفعَّلًا للتأليف. |
Config::withCssFeatureFlags(CssFeatureFlags $flags): self | src/Core/Config.php | يُرفِق مجموعة الأعلام بتهيئة المستند. |
تظهر رمزَا تشخيص التأجيل HTML_WRITING_MODE_LR_DEFERRED و
HTML_WRITING_MODE_RL_DEFERRED عبر قناة الإرشاد في نتيجة التصيير.
نموذج برمجي — بداية سريعة
قسم بعنوان «نموذج برمجي — بداية سريعة»<?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');أي مقطع لا يمكن تأليفه بأمانة يُصيَّر أفقيًا ويُضيف إرشاد
HTML_WRITING_MODE_RL_DEFERRED مع reason. افحص قناة الإرشاد
قبل اعتبار المُخرجات العمودية نهائية.
نموذج برمجي — إنتاجي
قسم بعنوان «نموذج برمجي — إنتاجي»سجِّل خطًّا يحمل مقاييس عمودية حقيقية عبر DocumentFactory، ليتمكّن
المُؤلِّف من قراءة vhea/vmtx، ثم أدخِل المستند في المُؤلِّف.
<?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);الحالات الحدّية والمزالق
قسم بعنوان «الحالات الحدّية والمزالق»- كلا العَلَمين مطلوب. يحتاج المُؤلِّف إلى
layoutVerticalLrوlayoutVerticalComposer. ومع إيقاف أيٍّ منهما، يُصيَّر المقطع أفقيًا. - المقاييس العمودية الحقيقية مطلوبة. خطٌّ بلا
vhea/vmtxلا يمكنه تحريك المُؤلِّف؛ فيرتدّ المقطع إلى التخطيط الأفقي. - التأجيل قابل للملاحظة. أي مقطع لا يمكن تأليفه يُصدر
HTML_WRITING_MODE_LR_DEFERRED/HTML_WRITING_MODE_RL_DEFERREDمعreason. ولا يُصيَّر مائلًا بصمت أبدًا. - لا ادّعاء مطابقة من هذا المسار. التأليف العمودي قدرة تخطيطية؛ وليس عبارة مطابقة PDF/UA-2 أو PDF/A-4 للملف المُنتَج. ويُقرِّر المُدقِّق المطابقة.
الأداء
قسم بعنوان «الأداء»يُضيف التأليف بحثًا عن التقدّم العمودي لكل محرف على مدى المقطع، خطّيًا في
عدد المحارف. والميزانية (wall_ms: 2000، peak_mb: 128) تتبع ملف
CJK، لأن خطوط المقاييس العمودية كبيرة والتكلفة المهيمنة هي معالجة
الخط، لا مرور التأليف.
ملاحظات أمنية
قسم بعنوان «ملاحظات أمنية»يقرأ المُؤلِّف المقاييس العمودية من خطوط مُسجَّلة مسبقًا ومُتحقَّق منها مسبقًا. ولا يفتح قناة مُدخلات جديدة. وتبقى ملفات الخطوط مُدخلات ثنائية غير موثوقة تُعالجها طبقة الطباعة بالتحقّق الموجود لديها. والنص المُؤلَّف يُصيَّر، لا يُفسَّر.
المطابقة
قسم بعنوان «المطابقة»| العبارة | المواصفة | البند |
|---|---|---|
| تستخدم الكتابة العمودية مقاييس المحارف العمودية لخط CIDFont في الوضع. | ISO 32000-2 | §9.7.5 |
writing-mode: vertical-lr / vertical-rl تضبط اتجاه تدفّق الكتل. | W3C CSS Writing Modes Level 3 | §3 |
| الاتجاه المنتصب لكل محرف يتبع خاصية الاتجاه العمودي في يونيكود. | Unicode UAX #50 | Vertical Orientation |
هذا تطبيق معاينة لمجموعة فرعية عمودية منتصبة أحادية العمود مع حدود الإغلاق الآمن المُوثَّقة أعلاه. ولا يُؤكِّد NextPDF أن المُخرجات من هذا المسار تطابق أي ملف؛ فالمُدقِّق هو من يُحدِّد ذلك. ولا يُعاد إنتاج أي نص معياري.