độ ổn định: Thử nghiệm
Hỗ trợ chế độ viết dọc CJK
Tổng quan nhanh
Phần tiêu đề “Tổng quan nhanh”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-lr và writing-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 vhea và vmtx), 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ợ.
Cài đặt
Phần tiêu đề “Cài đặt”composer require nextpdf/core:^3Bộ bố cục đi kèm gói core. Tùy chọn opt-in CssFeatureFlags::$layoutVerticalComposer
là @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.
Tổng quan khái niệm
Phần tiêu đề “Tổng quan khái niệm”Bố cục dọc chỉ bật khi cả layoutVerticalLr và layoutVerticalComposer đề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_DEFERREDcho một runvertical-lrkhông thể bố cục.HTML_WRITING_MODE_RL_DEFERREDcho một runvertical-rlkhô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.
Bề mặt API
Phần tiêu đề “Bề mặt API”| Ký hiệu | Vị trí | Vai trò |
|---|---|---|
CssFeatureFlags::$layoutVerticalComposer | src/Html/CssFeatureFlags.php | Cờ opt-in cho bộ bố cục dòng dọc (mặc định false). |
CssFeatureFlags::$layoutVerticalLr | src/Html/CssFeatureFlags.php | Cổng cho vertical-lr; cả hai phải bật mới bố cục. |
Config::withCssFeatureFlags(CssFeatureFlags $flags): self | src/Core/Config.php | Gắ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_DEFERRED và
HTML_WRITING_MODE_RL_DEFERRED hiện lên qua kênh khuyến nghị của kết quả kết xuất.
Mẫu mã — Khởi đầu nhanh
Phần tiêu đề “Mẫu mã — Khởi đầu nhanh”<?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.
Mẫu mã — Sản phẩm
Phần tiêu đề “Mẫu mã — Sản phẩm”Đă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
layoutVerticalLrvàlayoutVerticalComposer. 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/vmtxkhô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_DEFERREDkèm mộtreason. 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ủ.
Hiệu năng
Phần tiêu đề “Hiệu năng”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.
Ghi chú bảo mật
Phần tiêu đề “Ghi chú bảo mật”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.
Sự tuân thủ
Phần tiêu đề “Sự tuân thủ”| 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 #50 | Vertical 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.