تخطَّ إلى المحتوى
getnextpdf.com

الاستقرار: تجريبي

دعم الكتابة العمودية لنصوص CJK

معاينة اختيارية. المُؤلِّف العمودي مُعطَّل افتراضيًا. عندما يكون مُعطَّلًا، يُصيِّر المحرّك أفقيًا تمامًا كما كان من قبل — متطابق بايتًا ببايت. فعِّله فقط للمستندات التي تحتاج إلى سطور عمودية حقيقية، وتحقّق من النتيجة.

يُضيف مُصيِّر ⁨HTML⁩ مُؤلِّف سطور عمودي حقيقي لنمطَي الكتابة في ⁨CSS⁩ writing-mode: vertical-lr وwriting-mode: vertical-rl. عندما يكون المُؤلِّف مُفعَّلًا، تُكدَّس المحارف من الأعلى إلى الأسفل مع وضع لكل محرف مأخوذ من مقاييس الخط العمودية الحقيقية (جدولَا vhea وvmtx)، كما يصف نموذج الكتابة العمودية في ⁨PDF⁩ بـ ⁨ISO 32000-2⁩ §9.7.5. ويُدعَم كلا اتجاهَي تدفّق الكتل العموديَّين.

Terminal window
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 بمقاييس عمودية في مجموعة الاختبار، لذا يُتتبَّع التحقّق البصري المتقاطع بدلًا من تأكيده بملف ذهبي مُلحَق.
الرمزالموقعالدور
CssFeatureFlags::$layoutVerticalComposersrc/Html/CssFeatureFlags.phpعَلَم اختياري لمُؤلِّف السطور العمودي (الافتراضي false).
CssFeatureFlags::$layoutVerticalLrsrc/Html/CssFeatureFlags.phpبوّابة لـ vertical-lr؛ يجب أن يكون كلاهما مُفعَّلًا للتأليف.
Config::withCssFeatureFlags(CssFeatureFlags $flags): selfsrc/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 #50Vertical Orientation

هذا تطبيق معاينة لمجموعة فرعية عمودية منتصبة أحادية العمود مع حدود الإغلاق الآمن المُوثَّقة أعلاه. ولا يُؤكِّد ⁨NextPDF⁩ أن المُخرجات من هذا المسار تطابق أي ملف؛ فالمُدقِّق هو من يُحدِّد ذلك. ولا يُعاد إنتاج أي نص معياري.