Bỏ qua để đến nội dung
getnextpdf.com

độ ổn định: Thử nghiệm

Hỗ trợ chế độ viết dọc CJK

Bản xem trước opt-in. Bộ bố cục dọc mặc định tắt. Khi nó tắt, engine kết xuất nằm ngang hệt như trước — byte-identical. Chỉ bật nó cho những tài liệu cần các dòng dọc thật, và hãy kiểm chứng kết quả.

Trình kết xuất HTML bổ sung một bộ bố cục dòng dọc thật cho các chế độ viết CSS writing-mode: vertical-lrwriting-mode: vertical-rl. Khi bộ bố cục bật, các glyph xếp từ trên xuống dưới với vị trí từng glyph lấy từ số liệu dọc thật của font (các bảng vheavmtx), như mô hình viết dọc của PDF trong ISO 32000-2 §9.7.5 mô tả. Cả hai hướng dòng-khối dọc đều được hỗ trợ.

Terminal window
composer require nextpdf/core:^3

Bộ bố cục đi kèm gói core. Tùy chọn opt-in CssFeatureFlags::$layoutVerticalComposer@since 6.1.0. Phiên bản engine không đổi; tính năng có tính bổ sung và mặc định tắt.

Bố cục dọc chỉ bật khi cả layoutVerticalLrlayoutVerticalComposer đều được đặt. Khi cả hai bật, một run vertical-lr hoặc vertical-rl bố cục như một dòng dọc thật: mỗi glyph được đặt theo bước tiến dọc của nó từ số liệu vhea/vmtx của font, và các glyph mà UAX #50 đánh dấu là đứng thẳng được giữ đứng thẳng. vertical-lr xếp các cột từ trái sang phải; vertical-rl xếp các cột từ phải sang trái.

Điều này khác với façade mã hóa nhận biết cmap được ghi tài liệu trong Đặt văn bản CJK với mã hóa nhận biết cmap, vốn chứng minh đường mã hóa nhưng tự nó không điều khiển một chế độ viết dọc. Trang này ghi tài liệu cho bộ bố cục phía dàn trang mà tùy chọn opt-in chế độ viết kích hoạt.

Ranh giới fail-closed — khi nào nó bố cục, và khi khác thì nó làm gì

Phần tiêu đề “Ranh giới fail-closed — khi nào nó bố cục, và khi khác thì nó làm gì”

Bộ bố cục thận trọng theo thiết kế. Nó chỉ bố cục một run theo chiều dọc khi mọi glyph trong run đều là đứng thẳng theo UAX #50 và có số liệu dọc thật, không có liên kết đang mở bên trong run, và run là một cột đơn. Khi bất kỳ điều nào trong số đó không thỏa — cờ tắt, hoặc một run không thể bố cục trung thực — engine quay về bố cục nằm ngang và phát ra một chẩn đoán deferred khớp với chế độ:

  • HTML_WRITING_MODE_LR_DEFERRED cho một run vertical-lr không thể bố cục.
  • HTML_WRITING_MODE_RL_DEFERRED cho một run vertical-rl không thể bố cục.

Mỗi chẩn đoán mang theo một reason, nên một lần deferral là quan sát được và giải thích được, không bao giờ là một lần kết xuất nằm ngang âm thầm của văn bản mà tác giả yêu cầu đặt dọc.

Các ranh giới đã ghi tài liệu (các lát cắt sau này)

Phần tiêu đề “Các ranh giới đã ghi tài liệu (các lát cắt sau này)”

Các trường hợp này nằm ngoài phạm vi của lát cắt hiện tại và được theo dõi cho công việc về sau:

  • Glyph xoay (không đứng thẳng) bên trong một run dọc.
  • Xuống dòng dọc nhiều cột.
  • Hình chữ nhật liên kết dọc (một liên kết bên trong một run dọc làm hoãn run đó).
  • Không có font CJK có số liệu dọc đính kèm trong kho thử nghiệm, nên việc kiểm tra chéo trực quan được theo dõi chứ không được khẳng định bằng một golden đính kèm.
Ký hiệuVị tríVai trò
CssFeatureFlags::$layoutVerticalComposersrc/Html/CssFeatureFlags.phpCờ opt-in cho bộ bố cục dòng dọc (mặc định false).
CssFeatureFlags::$layoutVerticalLrsrc/Html/CssFeatureFlags.phpCổng cho vertical-lr; cả hai phải bật mới bố cục.
Config::withCssFeatureFlags(CssFeatureFlags $flags): selfsrc/Core/Config.phpGắn tập cờ vào một cấu hình tài liệu.

Các mã chẩn đoán deferred HTML_WRITING_MODE_LR_DEFERREDHTML_WRITING_MODE_RL_DEFERRED hiện lên qua kênh khuyến nghị của kết quả kết xuất.

<?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');

Một run không thể bố cục trung thực sẽ kết xuất nằm ngang và thêm một khuyến nghị HTML_WRITING_MODE_RL_DEFERRED kèm một reason. Hãy kiểm tra kênh khuyến nghị trước khi coi kết quả dọc là cuối cùng.

Đăng ký một font mang số liệu dọc thật qua DocumentFactory, để bộ bố cục có thể đọc vhea/vmtx, rồi chọn tài liệu vào bộ bố cục.

<?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);

Trường hợp đặc biệt & điểm cần lưu ý

Phần tiêu đề “Trường hợp đặc biệt & điểm cần lưu ý”
  • Cả hai cờ đều bắt buộc. Bộ bố cục cần layoutVerticalLrlayoutVerticalComposer. Khi một trong hai tắt, run kết xuất nằm ngang.
  • Bắt buộc có số liệu dọc thật. Một font không có vhea/vmtx không thể điều khiển bộ bố cục; run hoãn về bố cục nằm ngang.
  • Lần deferral quan sát được. Một run không thể bố cục sẽ phát ra HTML_WRITING_MODE_LR_DEFERRED / HTML_WRITING_MODE_RL_DEFERRED kèm một reason. Nó không bao giờ âm thầm kết xuất nằm nghiêng.
  • Không tuyên bố tuân thủ từ đường này. Bố cục dọc là một năng lực dàn trang; nó không phải một tuyên bố tuân thủ PDF/UA-2 hay PDF/A-4 cho tệp tạo ra. Một bộ kiểm tra quyết định việc tuân thủ.

Bố cục thêm một lần tra cứu bước-tiến-dọc theo từng glyph trên run, tuyến tính theo số glyph. Ngân sách (wall_ms: 2000, peak_mb: 128) theo hồ sơ CJK, vì các font có số liệu dọc lớn và chi phí chủ yếu là việc xử lý font, không phải lượt bố cục.

Bộ bố cục đọc số liệu dọc từ các font đã đăng ký, đã được xác thực sẵn. Nó không mở một kênh đầu vào mới. Các tệp font vẫn là đầu vào nhị phân không tin cậy được lớp typography xử lý bằng việc xác thực hiện có. Văn bản đã bố cục được kết xuất, không bị diễn giải.

Tuyên bốTiêu chuẩnĐiều khoản
Viết dọc dùng số liệu glyph dọc của CIDFont để định vị.ISO 32000-2§9.7.5
writing-mode: vertical-lr / vertical-rl đặt hướng dòng-khối.W3C CSS Writing Modes Level 3§3
Hướng đứng thẳng theo từng glyph tuân theo thuộc tính vertical-orientation của Unicode.Unicode UAX #50Vertical Orientation

Đây là một bản triển khai xem trước của một tập con dọc đứng thẳng một cột, với các ranh giới fail-closed đã ghi tài liệu ở trên. NextPDF không khẳng định rằng kết quả từ đường này tuân thủ bất kỳ hồ sơ nào; một bộ kiểm tra đưa ra phán quyết đó. Không có văn bản tiêu chuẩn nào được tái tạo.