フォントフォールバックと縦書きテキスト
HotPDF は Unicode スクリプトによりフォールバックフェイスを選択し、未解決のコードポイントを報告し、実際の縦書き CID 書き込みモードで CJK テキストを出力できます
ドキュメントレベルのフォールバックチェーン
THotPDF.SetFontFallbackChain は1つの THPDFFontScript カテゴリに対して順序付けられたフェイスリストを保存します
THPDFPage.TextOutWithFallback は各 Unicode スカラーを選択されたフェイス、そのスクリプトチェーン、共通チェーンに対して解決し、同じフェイスを持つ隣接スカラーを1つのテキストランとして出力します
- フォールバックチェーンはドキュメント設定であり、ページ全体で利用可能なまま維持されます
- 呼び出し側の順序を保持しながら、重複するフェイス名と空のフェイス名は削除されます
- インストール済みフェイスのプロービングは、カバレッジを受け入れる前にサイレントな GDI 置換を拒否します
- 補助平面のスカラーは分類前に UTF-16 サロゲートペアからデコードされます
- 各フォールバックランは既存の埋め込み Type0 フォント、サブセッティング、
ToUnicode、およびページ間共有フォントパスを使用します - フォールバックレイアウトは、要求された bold / italic フェイスとともにインストール済みフォントファミリーを検査し、フォントスタイル、文字セット、サイズ、書き込み方向の設定をすべてランをまたいで保持したうえで、後処理で呼び出し側のフォントを復元します
実行可能な診断
AnalyzeUnresolvedGlyphs は読み取り専用のカバレッジ監査を実行し、TextOutWithFallback は出力中に遭遇した未解決スカラーを記録します
各 THPDFUnresolvedGlyphInfo にはスカラーコードポイント、プライマリフェイス、分類されたスクリプト、およびセミコロン区切りのフォールバック提案リストが含まれます
GetUnresolvedGlyphs は現在のドキュメントレポートを返し、ClearUnresolvedGlyphs は新しい報告間隔を開始します
THotPDF.ResolveFontForCodePoint と THotPDF.AnalyzeUnresolvedGlyphs の明示スタイル付きオーバーロードは TFontStyles を受け付けるため、プリフライトで出力時に使われるのと同じフェイスを検査できます。元のオーバーロードは引き続き regular フェイスを検査します
テキストボックス、SVG 埋め込みテキスト、ロード済みテキストの外観は、PDF 内部のフォント名をシステムファミリーとして扱ったり、すべてのランを regular フェイスに切り替えたりすることなく、フォールバックレイアウトを通じてスタイル付きフォントファミリーを保持します
縦書き CJK
THPDFPage.TextOutVertical は現在のフェイスの縦書きバリアントを選択し、文字ごとに手動配置する代わりに 1 つの Identity-V テキストランを出力します
- CID 子孫フォントには
/DW2のデフォルトと、グリフごとの/W2エントリが含まれます - OpenType の
vheaとvmtxが縦書きのアドバンスと上部サイドベアリングを供給します。TrueType の原点は各glyfの境界ボックスから導出され、VORGが CFF の正式な原点デフォルトと例外を供給します - 縦書きテーブルを持たないフォントは、設定可能な 1000 単位のアドバンスと 880 単位の原点のデフォルトを使います
sfVerticalAlternatesの場合、長さを保存する GSUB ラン一式は、アドバタイズされていればvrt2を使い、そうでなければvertへフォールバックします。アクティブな用字系と言語の選択は保持されます- フォントが句読点の置き換えを欠いていても Unicode の縦書き表示形をマップしている場合、読点・句点・括弧・ダッシュ・省略号などの関連句読点はそれらのグリフを使い、
ToUnicodeがソーステキストを保持します - 縦書きの
vkrnとvpalGPOS 機能は、ShapingFeaturesを通じて引き続き利用できます GetVerticalTextAdvanceは、次の縦書きランを配置するために必要なユーザー空間のアドバンスを返します
例
PDF.SetFontFallbackChain(hfsCJK,
['Microsoft YaHei UI', 'Yu Gothic UI', 'Malgun Gothic']);
PDF.SetFontFallbackChain(hfsEmoji, ['Segoe UI Emoji']);
PDF.CurrentPage.SetFont('Arial', [], 12);
PDF.CurrentPage.TextOutWithFallback(72, 72, 0, Text);
PDF.CurrentPage.SetFont('Yu Gothic UI', [], 14);
PDF.CurrentPage.TextOutVertical(420, 72, VerticalText);
Missing := PDF.GetUnresolvedGlyphs;