PDF フィルターサポート

概要

PDF のストリームや埋め込み画像は、フィルター名で自分のエンコーディングを示します。HotPDF は、ドキュメントの生成時や外部コンテンツのデコード時に、主に次のフィルターファミリーを扱います

よく使われるフィルター

  • FlateDecode: 生成ストリームの主力となる圧縮フィルターで、zlib ベース解凍経路の中核です
  • LZWDecode: HPDFLZW.pas により、レガシー環境や互換性が必要な場面でサポートされます
  • DCTDecode: HotPDF の画像読み込み経路が扱う標準的な JPEG 画像データに使われます
  • CCITTFaxDecode: 読み込んだ Group 3 / Group 4 モノクロ画像ストリームは、1 次元・2 次元の行、T.4/T.6 非圧縮拡張、EOFB 処理、バイト境界の調整、出力極性、標準の DecodeParms エントリーによる破損行の限定的な復旧に対応しています
  • ASCIIHexDecode / ASCII85Decode / RunLengthDecode: HotPDF v2.4.0 以降、HPDFTypes.pas にエンコーダーヘルパー(_ASCIIHexEncode、_ASCII85Encode、_RunLengthEncode)が公開されています。任意のバイナリーコンテンツを 7 ビットクリーンな経路に載せたいときや、PDF 1.7 7.4 のラウンドトリップを明示的に扱いたいときに役立ちます
  • JBIG2Decode / JPXDecode: PDF 1.7 7.4.7 / 7.4.9 で定義されたフィルター名です。HotPDF は JPXDecode 画像ストリームと JPEG 2000 ファイルを OpenJPEG バックエンドの JPEG2000 デコーダーへ回し、その結果を呼び出し側が選んだ圧縮で埋め込みます。二値 JBIG2 出力と JBIG2Decode 画像の読み込み経路は、ネイティブの JBIG2 エンコード/デコードパイプラインを使い、シンボルディクショナリー、グローバルセグメント、lossy レベル、黒ドットフィルタリングの各制御に対応しています

実務上の注意点

  • すべてのフィルターが単一の汎用 API で扱えるわけではなく、専用の画像ヘルパーやストリームヘルパーユニット経由でアクセスするものもあります
  • 生成する PDF コンテンツについては、THotPDF.Compression がユーザー向け設定の中心であり続けます
  • 外部データを読み込むときは、適用されるフィルターがソースファイルの形式と使用するヘルパークラスで決まります
  • 暗号化 PDF では、これらのフィルターがセキュリティハンドラーと組み合わさります。対応している AES‑128(V=4 R=4 / CFM=AESV2)と RC4(V=1/V=2)の選択肢は CryptKeyLength を参照してください
  • ConfigureCryptFilterDefaults により、文字列・通常ストリーム・埋め込みファイルストリームそれぞれについて、暗号化フィルターのポリシーを個別に選べます。パスワードセキュリティは StdCF か Identity を、公開鍵セキュリティは DefaultCryptFilter か Identity を受け付けます。SetStreamCryptFilter は、既存のデコードパイプラインに触れることなく、明示的な先頭 Crypt フィルターを追加または解除します。ストリーム単位のオーバーライドには、暗号化ディクショナリーの /V 4 以降が必要です
  • 暗号化ペイロードラッパーは、通常のページストリームを読めるままに保ちながら、EFOpen 暗号化フィルター経由で埋め込みファイルのメタデータとバイト列を保護します。読み込み済みドキュメント向けの明示的な検査 API とアンロック API は HotPDF v2.715.0 以降で使えます
  • パスワード保護された添付ファイルストリームは /EFF を使い、/EFF が /StmF と異なる場合には必ず明示的な Crypt フィルターを受け取ります。公開鍵暗号の明示的ストリームフィルターは、ストリーム固有の受信者エンベロープが必要なため、条件を満たさなければ失敗します
  • 読み込み済みドキュメントは、元の /CF、/StrF、/StmF、/EFF ポリシーを THPDFCryptFilterInfo で公開します。大文字小文字を区別する外部名前付きフィルター、明示指定と省略の両方がある /CFM /None、認証イベント、実効鍵長まで参照できます。標準ハンドラーの V2 フィルター長はバイトとして、公開鍵の V2 フィルター長はビットとして読み込み、V2 鍵は 40 ビットと 128 ビットのみ受け付けます。平文のオブジェクトストリームコンテナーは /StrF 経由で格納メンバー文字列を復号し、暗号化されたコンテナーではメンバーの二重復号を行いません。インクリメンタル更新でも読み込んだポリシーは保持されます。HotPDF v2.675.0 以降で利用可能
  • 対話型フォームフィールドは、ビューアーが描画する Widget 注釈として出力されます。AcroForm サポートを参照してください
  • テキストマークアップ注釈(Highlight、Underline、Squiggly、StrikeOut)とドキュメント内ジャンプリンク(GoTo、GoToR、Launch)は、HotPDF v2.6.0 以降、新しい THPDFPage.Add*Annotation / AddGoToLink / AddGoToRLink / AddLaunchLink メソッドとして使えます
  • DeviceCMYK 出力は THPDFPage.SetCMYKColor / SetCMYKFillColor / SetCMYKStrokeColor で行えます。ICC 管理のカラースペースは HotPDF v2.7.0 以降、THotPDF.RegisterICCProfile で登録し、SetFillColorSpace / SetStrokeColorSpace + SetFillColor / SetStrokeColor 経由で適用します
  • 保存前に THotPDF.UseXRefStream を true にすると、テキスト形式の xref / trailer / startxref 並びの代わりに、単一の /Type /XRef FlateDecode 圧縮クロスリファレンスストリームが出力されます(PDF 1.7 7.5.8)。HotPDF v2.8.0 以降で利用可能
  • THotPDF.EnableXMPMetadata を true にすると、XMP の /Type /Metadata /Subtype /XML ストリームが Catalog に添付されます(PDF 1.7 14.3.2)。Info ディクショナリーのフィールドから自動生成されるほか、CustomXMP で手作りのパケットを渡すこともできます。HotPDF v2.9.0 以降で利用可能
  • メソッド単位の PDF バージョンゲート(HotPDF v2.24.0 以降)。v2.4.0 以降に追加されたすべての機能メソッドは、出力前に RequirePDFVersion を確認します。StrictVersionLock=false(既定)ではドキュメントの Version が機能の要求する最小バージョンへ自動的に引き上げされ、StrictVersionLock=true では呼び出しが拒否されるため、保存ファイルは選択した 1.3 / 1.4 / 1.5 / 1.6 / 1.7 の参照仕様に厳密に適合します
  • FlateDecode 圧縮画像データ向けの PNG / TIFF プリディクターエンコーダー(PDF 1.7 7.4.4.4):_PNGPredictorEncode は libpng の最小絶対差フィルター発見法(Predictor=15)を、_TIFFPredictor2Encode は水平差分(Predictor=2)を適用します。HotPDF v2.10.0 以降で利用可能
  • タグ付き PDF のエントリーポイント(PDF 1.7 14.7-14.8):THotPDF.Lang は Catalog の /Lang を設定し、EnableTaggedPDF は /MarkInfo <</Marked true>> とスタブの /StructTreeRoot を出力し、新しい THPDFPage.BeginMarkedContent / BeginMarkedContentMCID / EndMarkedContent メソッドが BMC / BDC / EMC のコンテンツストリームオペレーターを書き込みます。HotPDF v2.11.0 以降で利用可能
  • 軸方向グラデーションと半径方向グラデーション(PDF 1.7 7.10 / 8.7):THotPDF.RegisterAxialGradient / RegisterRadialGradient が Function Type 2 / Shading Type 2-3 / Pattern Type 2 の一連のスタックを組み立て、安定したパターン名を返します。THPDFPage.SetFillPattern / SetStrokePattern でページに取り付けます。開始色/終了色のコンポーネント数により DeviceGray(1)/ DeviceRGB(3)/ DeviceCMYK(4)が選ばれます。HotPDF v2.13.0 以降で利用可能。Function Type 3 のマルチストップグラデーションは、v2.18.0 以降は RegisterMultiStopAxialGradient、v2.686.0 以降は RegisterMultiStopRadialGradient で使えます
  • インライン画像(PDF 1.7 8.9.7)は THPDFPage.DrawInlineImage で使えます。Filter を指定しない場合、生バイトは ASCIIHex で自動ラップされるため、コンテンツストリームは 7 ビットクリーンを保ちます。HotPDF v2.18.0 以降で利用可能
  • OutputIntents(PDF 1.7 14.11)は THotPDF.AddOutputIntent で使えます。呼び出しごとに、登録済み ICC プロファイルを参照する任意の /DestOutputProfile 付きの /Type /OutputIntent ディクショナリーが Catalog に追加されます。HotPDF v2.18.0 以降で利用可能
  • AcroForm 外観ストリームの自動生成(PDF 1.7 12.5.5 / 12.7.3.3 / 8.10):対話型フォームフィールドを追加する前に THotPDF.AutoFormAppearances を true にすると、HotPDF は各ウィジェットの /AP /N エントリー(ボタンは Yes / Off サブディクショナリー)向けに /Subtype /Form フォーム XObject を事前構築し、AcroForm の /DR デフォルトリソースに Helvetica / ZapfDingbats の間接フォントディクショナリーを設定し、/NeedAppearances を false に切り替えて、レンダラーが埋め込みストリームを尊重するようにします。HotPDF v2.28.0 以降で利用可能
  • ViewerPreferences の /ViewArea と /ViewClip(PDF 1.4 12.2 Table 152)は THotPDF.ViewArea / THotPDF.ViewClip プロパティとして公開されています(対応する vpViewArea / vpViewClip セットメンバー付き)。どちらも THPDFPageBoundary の値(MediaBox / CropBox / BleedBox / TrimBox / ArtBox)を受け付け、PDF 1.4 の 4 つのページ境界 ViewerPreferences における HotPDF の対応を完成させます。HotPDF v2.29.0 以降で利用可能
  • ページトランジション(PDF 1.1 / 1.5 12.4.4):THPDFPage.SetPageTransition がページに /Trans ディクショナリーを書き込み、/PageMode /FullScreen の PDF リーダーでページ移動がアニメーション化されます。PDF 1.1 のスタイル(Split、Blinds、Box、Wipe、Dissolve、Glitter、R)と PDF 1.5 のスタイル(Fly、Push、Cover、Uncover、Fade)が THPDFTransitionStyle 列挙型で公開されており、対応する /Dm、/M、/Di サブオプションも使えます。THPDFPage.SetPageDuration は自動送りの遅延秒数を /Dur に書き込みます。HotPDF v2.30.0 以降で利用可能
  • ページレベルの透過グループ(PDF 1.4 11.6.6 / 7.5.5):THPDFPage.SetTransparencyGroup が /Group ディクショナリー(/Type /Group /S /Transparency)を取り付け、レンダラーがアルファを含むコンテンツを予測どおりに合成できるようにします。THPDFGroupColorSpace 列挙型(DeviceGray / DeviceRGB / DeviceCMYK または省略)でデバイスカラースペースを選ぶか、THotPDF.RegisterICCProfile で事前登録した ICC プロファイルの名前を THPDFPage.SetTransparencyGroupICC に渡します。任意の /I(Isolated)と /K(Knockout)フラグで合成の挙動を制御でき、THPDFPage.ClearTransparencyGroup は以前に取り付けたエントリーを取り除きます。HotPDF v2.32.0 以降で利用可能
  • インクリメンタル更新(PDF 1.7 ISO 32000-1 7.5.6):THotPDF.BeginIncrementalUpdate(SourceFile) が既存の PDF を追記専用モードで読み込み、以降の CreateIndirect* 呼び出しは新しいオブジェクトを自動的に dirty マークし、THotPDF.MarkDirty(Obj) は既存の読み込み済みオブジェクトを再出力対象としてタグ付けします。THotPDF.SaveIncrementalUpdate(TargetFile) は元のソースバイトをそのまま書き出し、オブジェクト番号を保持したまま dirty オブジェクトだけを追記し、新しい xref サブセクションを出力し、直前の xref を指す /Prev を持つ trailer で締めます。既存の AddSignedSignatureField + PreparePDFForSigning + InsertSignatureHex パイプラインと組み合わせれば、署名済みドキュメントに後から署名フィールドを追加しても、先の署名を無効化しません(元のバイトは一切変わらないため、/ByteRange のダイジェストは有効なままです)。HotPDF v2.35.0 以降で利用可能
  • 埋め込み TrueType フォント名の正規化:HotPDF は埋め込み TrueType の name テーブルを読み、/BaseFont、/FontDescriptor /FontName、/FontFamily、descendant CID フォント名をフォントプログラムの PostScript 名に合わせます。これにより、PDF フォントディクショナリーと埋め込み TTF ペイロードの不一致が原因で発生する Adobe Acrobat のフォントキャプチャ失敗を避けられます。HotPDF v2.35.1 以降で利用可能
  • TrueType フォントサブセット化(PDF 1.7 ISO 32000-1 9.6.4 / 9.8.2):BeginDoc の前に THotPDF.EnableFontSubsetting を true にすると、HotPDF は埋め込み TrueType ペイロードを、ドキュメントが実際に使うグリフだけを含む形で再構築します。典型的なラテン文字ドキュメントでは、埋め込みフォントのサイズが約 90% 減ります(1 行の "Hello, world." で 1 MB の Arial が約 70 KB に)。複合グリフの依存は再帰的に追跡され、GID 番号は保持されるため(既存の Type0 / Identity-H コンテンツストリームはそのまま動きます)、新しい /BaseFont には仕様が定める 6 文字の「+」接尾辞プレフィックスが自動的に付きます(例:/BaseFont /AAAAAA+ArialMT)。既定はオフです。編集ワークフローのためにフォント全体を埋め込みたい場合は、オプトインで有効にしてください。HotPDF v2.36.0 以降で利用可能
  • Compact Font Format(CFF)サブセッター(PDF 1.7 ISO 32000-1 9.7.4 / 9.9):OpenType-CFF(.otf、sfntVersion OTTO)と Type 1 / Type 1C フォントのための TrueType サブセッターの相棒です。ユニットから公開されている HPDFSubsetCFF(CFFBytes, KeepGlyph) 関数は CharStrings INDEX を再構築し、保持しないグリフを最小の 1 バイト endchar スタブで置き換えます。GID 番号はバイト単位で保持されます。HotPDF v2.37.0 以降で利用可能
  • OpenType-CFF(.otf)埋め込み経路を StoreFont に接続(PDF 1.6+ 9.7.4 Table 117)。GDI で読み込んだフォントバイナリーが sfnt OTTO コンテナーの場合、HotPDF は埋め込み 'CFF ' サブテーブルを HPDFSubsetOTFContainer でサブセット化し、フォントプログラムを /FontFile3 /Subtype /OpenType で出力し、descendant フォントディクショナリーを /CIDFontType2 の代わりに /Subtype /CIDFontType0 で書き込みます。TrueType フォントは従来どおり /FontFile2 + /CIDFontType2 の経路を通り、挙動は変わりません。HotPDF v2.38.0 以降で利用可能
  • CFF サブルーチンサブセット化のエンドツーエンド対応(PDF 1.7 9.7.4 §6 / Adobe Tech Note #5177 §3.1):CFF サブセッターは、Global Subr INDEX(CFF バイナリー内で String INDEX の直後に位置)と Local Subr INDEX(Private DICT の下にネストし、Top DICT オペレーター 18 + Private DICT オペレーター 19 で到達)の両方から未使用エントリーを取り除くようになりました。固定点に達するまで callsubr(op 0x0A)と callgsubr(op 0x1D)のチェーンを推移的にたどるため、Local Subr → Global Subr → さらに別の Local Subr と呼び出す CharString も 1 回の反復で回収されます。未使用エントリーはそれぞれ 1 バイトの return スタブに置き換えられ、INDEX は末尾の余剰をゼロ埋めしてその場で書き直されます。この挙動は公開ヘルパーの HPDFSubsetCFF と HPDFSubsetOTFContainer から利用でき、より低レベルの CFF スキャナーは内部のままです。HotPDF v2.39.0 以降で利用可能
  • CID キー付き CFF のサブセット化(PDF 1.7 ISO 32000-1 9.7.4 / Adobe Tech Note #5176 §18-19):CFF サブセッターは、CID キー付き OpenType-CFF フォントを示す Top DICT の ROS オペレーター(12-30)を認識し、Font DICT の FDArray(12-36)INDEX をたどります。各 Font DICT は独自の Private DICT + Local Subr INDEX を持ちます。FDSelect(12-37)のグリフ対 FD マップはバイト単位で保持されます。サブルーチンクロージャーの走査は保持する各 CharString の FD コンテキストを追跡するため、FD #5 のグリフがマークするのは FD #5 の Local Subr だけで、Global Subr は FD をまたいで共有されたままです。各 FD の Local Subr INDEX は未使用エントリーを 1 バイトの return スタブへ畳んでその場で書き直されます。CJK / Indic / アラビア語の OTF フォント(Adobe Fan/Gothic/Heiti/Ming/Myungjo/Song Std、Kozuka Pr6N、Source Han Sans など)は、そのまま埋め込む代わりにサブセット化パイプライン全体を通るようになりました。HotPDF v2.40.0 以降で利用可能
  • オブジェクトストリーム(PDF 1.5 ISO 32000-1 7.5.7):UseXRefStream に加えて THotPDF.UseObjectStreams を true にして SaveToStream すると、対象となる間接オブジェクト(ストリーム、暗号化ディクショナリー、trailer が指す Catalog と Info ディクショナリーを除くすべて)が 1 つ以上の /Type /ObjStm コンテナーストリームに詰め込まれます。クロスリファレンスストリームは、type-2 エントリー(フィールド 2 = ホスト ObjStm のオブジェクト番号、フィールド 3 = ストリーム内のエントリーインデックス)で詰め込まれたオブジェクトを参照します。小さなディクショナリーが多数ある PDF(複数ページのドキュメント、注釈、AcroForm ウィジェット、構造ツリー要素、Optional Content レイヤー)ではファイルサイズが大幅に減り、グラフィックスのみの 30 ページのスモークテストでは 14502 バイトから 8488 バイトへ(41.5% 減)縮みました。UseXRefStream がオフの場合(仕様によりテキスト形式の xref テーブルには type-2 エントリーを書けません)や Version が PDF 1.5 未満の場合は、黙って false にダウングレードします。HotPDF v2.41.0 以降で利用可能
  • ソフトマスク画像 / SMask(PDF 1.4 ISO 32000-1 8.9.5.4):THotPDF.AddImageWithSMask(Width, Height, RGB, Alpha) はカラー画像 XObject に加えて 8 ビット DeviceGray のソフトマスク画像 XObject を出力し、/SMask の相互参照を自動的に接続します。これにより、従来の /ImageMask 経路のような二値のオン/オフではなく、各ピクセルがチャンネルごとの完全な透過度を持てます。簡易オーバーロードの THotPDF.AddImageWithSMask32(Bitmap32) は、32 ビット BGRA の TBitmap から RGB プレーンとアルファプレーンを取り出し、1 回の呼び出しでアルファ付き PNG 相当を埋め込めます。AddImageWithTransparency と AddImageWithTransparency32 は、画像中心の名前に変えて同じワークフローを公開しています。どちらの呼び出しも RequirePDFVersion(pdf14) でゲートされるため、strict モードの 1.3 出力も適合を保ちます。HotPDF v2.42.0 以降で利用可能
  • 画像マスクの簡易ヘルパー:AddImageAsMask は二値の /ImageMask を出力し、AddImageWithMask はそのマスクを /Mask 経由でカラー画像に取り付けます。どちらも THPDFPage.ShowImage で使える通常の画像インデックスを返します
  • 画像ごとの圧縮制御:AddImageWithJpegQuality は JpegQuality を変更せずに 1 回の呼び出しで JPEG 品質を指定でき、AddMonochromeImageAuto と icAutoMono は 1 ビットのビットマップ入力に対して Flate、CCITT Group 4、JBIG2 を自動選択します
  • 無色タイリングパターンの描画(PDF 1.7 ISO 32000-1 8.6.6.1):THotPDF.RegisterTilingPattern は v2.19.0 以降 /PaintType 1(有色)と /PaintType 2(無色)の両方を出力してきましたが、ページ側の対応するオペレーター列は有色バリアントでしか正しくありませんでした。新しい 6 つの THPDFPage メソッド(SetFillPatternRGB / SetStrokePatternRGB / SetFillPatternGray / SetStrokePatternGray / SetFillPatternCMYK / SetStrokePatternCMYK)は、ページの Resources/ColorSpace ディクショナリーに対応する [/Pattern /BaseCS] のティンティングカラースペースを自動登録し、仕様が定める tint_components /Pn scn 列を出力することで、無色の経路を駆動します。タイルが自分の色を持つ有色バリアントには、従来の SetFillPattern / SetStrokePattern を使ってください。HotPDF v2.43.0 以降で利用可能
  • タイリングパターン描画の完全対応では、パターンマトリックスを親コンテンツストリームの既定座標系を基準に適用し、3 つの /TilingType 配置ルールをすべて実装し、負の /XStep と /YStep に対応し、各セルを独立したパスで開始し、無色パターンのベースティントをフィルとストロークの両操作に適用し、上限付きのネストパターン実行を保持します。拡張された RegisterTilingPattern オーバーロードと THPDFTilingPatternBuilder.TilingType / Matrix プロパティが、生成 PDF 向けに同じ検証済みの制御を公開します。HotPDF v2.542.0 以降で利用可能
  • CIELab カラースペース(PDF 1.3+ ISO 32000-1 8.6.5.3):THotPDF.RegisterLabColorSpace(Xw, Yw, Zw, aMin, aMax, bMin, bMax) はインラインの [/Lab << /WhitePoint /BlackPoint /Range >>] カラースペース配列を組み立て、自動生成された名前(Lab1、Lab2、...)で保存し、その名前を通常の THPDFPage.SetFillColorSpace / SetStrokeColorSpace + SetFillColor([L, a, b]) / SetStrokeColor([L, a, b]) パイプラインで使えるように返します。ICC 印刷ワークフローには D50 光源の [0.9505, 1.0, 1.089] を、sRGB 相当の表示には D65 光源の [0.95047, 1.0, 1.08883] を入れ、L* を [0..100]、a* と b* を選択した範囲(通常 [-128..127])で描画します。HotPDF v2.44.0 以降で利用可能
  • スポットカラー用の Separation カラースペース(PDF 1.3+ ISO 32000-1 8.6.6.4):THotPDF.RegisterSeparation(ColorantName, AlternateCS, TintC1) は、単一のティントオペランドが [0..1] を取る 1 コンポーネントのスポットインクを宣言し、内部で線形の Function Type 2 ティント変換を組み立てます。返された名前(Sep1、Sep2、...)を通常の SetFillColorSpace / SetStrokeColorSpace + SetFillColor([tint]) / SetStrokeColor([tint]) パイプラインで使ってください。AlternateCS には DeviceGray、DeviceRGB、DeviceCMYK を指定でき、TintC1 は tint = 1.0 における代替カラースペースのコンポーネントを与えます。スペースを含む Pantone などのインク名もそのまま受け付け、HotPDF がカラースペース名の書き込み時に PDF 1.7 7.3.5 に従って #20 へエスケープします。HotPDF v2.45.0 以降で利用可能
  • AcroForm の複数行・comb テキスト外観ストリーム(PDF 1.7 ISO 32000-1 12.7.4.3):THotPDF.AutoFormAppearances が有効なとき、Flags に ffMultiline を含むテキストフィールドは、ワードラップされた /AP /N フォーム XObject を得ます(Td + T* + /TL の行送りレイアウトで、CR / LF / CRLF の区切りを尊重し、表示行数で切り詰めます)。Flags に ffComb と正の MaxLen を一緒に含むフィールドは、グリフごとに絶対 Tm マトリックスを使って各文字を等幅のセルに描画します。v2.28.0 の単一行レイアウトは、これらのフラグを持たないフィールドではバイト単位で維持されます。初期値の国際文字は依然としてビューアーの /NeedAppearances 再計算経路に流れます。埋め込み CID フォントによる完全な外観生成は今後の課題です。HotPDF v2.46.0 以降で利用可能
  • AcroForm の /AP Unicode フォント(PDF 1.7 ISO 32000-1 12.7.2 + 12.7.4.3):THotPDF.SetFormUnicodeFontDict(LogicalName, FontDict) は、呼び出し側が用意した Type 0 / CIDFontType2 + Identity-H の複合フォントを AcroForm の /DR/Font デフォルトリソースディクショナリーへ登録します。登録後は、AcroForm レベルの /DA、すべての Tx ウィジェットの /DA、さらに非 ASCII の Tx 初期値について AutoFormAppearances が生成する /AP /N ストリームがすべて論理名へ切り替わります。フォーム XObject の /Resources/Font サブディクショナリーも同じ間接フォントを参照するため、AP はレンダリング時の /DR 解決に依存しない自己完結したものになります。相棒ヘルパーの THotPDF.CreateIndirectFontDict は、間接 PDF オブジェクトとして登録された空の THPDFDictionaryObject を返すので、呼び出し側は内部ヘルパーに触れずに独自のフォントディクショナリー(または「N G R」形式の間接シリアライズを必要とする任意のディクショナリー)を組み立てられます。空の LogicalName と nil の FontDict を渡すと、v2.46.0 の ASCII 専用 /Helv の挙動に戻ります。ASCII の Tx フィールドは引き続き /Helv を使い、v2.46.0 / v2.55.0 とバイト単位で同じ出力になります。複数行 + comb の非 ASCII /AP と RTL の bidi シェーピング(UAX #9 + アラビア語の文脈結合)は今後の課題です。HotPDF v2.56.0 以降で利用可能。ffMultiline の非 ASCII /AP 対応(Td / T* / /TL の行送りと CJK 対応ワードラップによる行単位の UTF-16BE hex Tj)は v2.57.0 以降、ffComb の非 ASCII /AP 対応(CID ごとの等幅絶対 Tm セル + UTF-16 サロゲートペア処理付きのコードポイントごとの単一セル Tj)は v2.58.0 以降、右から左への記述方向のための THotPDF.FormUnicodeRTL プロパティ(/AP の Tj hex では UTF-16 の並びを反転し、/V は論理順を維持。アラビア語は呼び出し側が U+FB50..U+FDFF + U+FE70..U+FEFF の Unicode 表示形へ事前シェーピングする前提。UAX #9 + 自動 GSUB シェーピングは未対応)は v2.59.0 以降
  • AcroForm のリッチテキスト Tx ウィジェット(PDF 1.5+ ISO 32000-1 12.7.4.3 + 附属書 L):THPDFPage.AddRichTextField(FieldName, InitialValue, RichValue, DefaultStyle, Rectangle, [MaxLen], [Flags]) は、/RV(リッチテキスト XHTML 本文)、/DS(CSS 風の既定スタイル)、自動で OR される ffRichText の /Ff ビット 26、さらに /RV を解釈しないリーダー向けのプレーンテキスト /V + /DV フォールバックを備えたテキストウィジェットを出力します。RichText ビットが立っていれば Acrobat と Foxit は /RV から直接描画し、リーダーがインストール済みの Unicode フォントへフォールバックするため、マルチバイトコンテンツ(CJK / キリル / アラビア語 / アクセント付きラテン文字)は HotPDF が /DR Resources に CID フォントを埋め込まなくても正しく表示されます。/V と /RV の両方でマルチバイト入力を自動検出し、必要なら UTF-16BE hex 文字列エンコーディング(FE FF BOM + ビッグエンディアンのコードユニット)へ切り替えます。HotPDF 自身の /AP 経路での CID フォント外観ストリーム生成は今後の課題ですが、リッチテキスト対応ビューアーでは不要です。HotPDF v2.55.0 以降で利用可能
  • マルチカラーラントのスポットインクワークフロー向け DeviceN カラースペース(PDF 1.3+ ISO 32000-1 8.6.6.5):THotPDF.RegisterDeviceN(ColorantNames, AlternateCS, TintC1Matrix) は RegisterSeparation を単一のスポットインクから N 色へ一般化します。ティント変換は PostScript 計算機方式の Function Type 4 で、与えた N x M 行列の上に線形の重み付きブレンドを出力します(行 n 列 m は、colorant n 単独が 1.0 のときの AlternateCS チャンネル m への寄与)。返されるカラースペース名(DevN1、DevN2、...)は通常の SetFillColorSpace + SetFillColor([t0, t1, ..., t_{N-1}]) パイプラインを駆動します。AlternateCS には DeviceGray、DeviceRGB、DeviceCMYK を指定でき、スペースを含むインク名は PDF 1.7 7.3.5 に従って #20 へエスケープされ、特殊名 None は未使用の colorant スロットを示します。HotPDF v2.47.0 以降で利用可能
  • フリーフォーム Gouraud シェーディング三角形メッシュ(PDF 1.3+ ISO 32000-1 8.7.4.5.4):THotPDF.RegisterFreeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, Vertices) は /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8 を備えた /ShadingType 4 ストリームを宣言し、ページの Resources/Pattern ディクショナリー上でインラインの Pattern Type 2 エントリーに包んで、通常の SetFillPattern / SetStrokePattern パイプライン用の自動生成パターン名(Sh1、Sh2、...)を返します。各頂点は 1 バイトのフラグ(独立三角形では常に 0)+ 2 バイトのビッグエンディアン X + 2 バイトのビッグエンディアン Y + NumComponents 個の 8 ビットカラーコンポーネントとしてパックされます。NumComponents 引数は 1(DeviceGray)、3(DeviceRGB)、4(DeviceCMYK)を受け付け、各頂点は (X, Y, c1...cN) の順で 2 + NumComponents 個の Extended 値を Vertices に渡します。頂点数は 3 の倍数でなければなりません。/Decode が 16 ビット座標を [XMin, XMax] x [YMin, YMax] へ、カラーコンポーネントを [0, 1] へ写像します。Type 5(lattice)、Type 6(Coons パッチ)、Type 7(テンソル積)のメッシュシェーディングは今後の課題でした。HotPDF v2.48.0 以降で利用可能
  • ラティス形式 Gouraud シェーディング三角形メッシュ(PDF 1.3+ ISO 32000-1 8.7.4.5.5):THotPDF.RegisterLatticeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, VerticesPerRow, Vertices) は、頂点を M 行 x N 列のラティスに並べ、隣接する 2 行ごとに三角形ストリップを自動生成させる /ShadingType 5 ストリームを宣言します。RegisterFreeFormGouraudShading(Type 4)と違って頂点ごとのフラグバイトはなく、シェーディングディクショナリーに /BitsPerFlag は存在せず、各頂点は 4 + NumComponents バイト(2 バイトのビッグエンディアン X + 2 バイトのビッグエンディアン Y + N 個のカラーコンポーネント)だけを占有します。代わりにシェーディングディクショナリーは必須の /VerticesPerRow N エントリーを持ちます。標本グリッドに既に載っているソースデータ(地形、FEA 結果、科学技術ヒートマップ)に使うとよいでしょう。アプリケーションは頂点を行優先で渡すだけで、描画パイプラインが三角形ストリップのトポロジーを自動的に組み立てます。VerticesPerRow は 2 以上、総頂点数は VerticesPerRow の倍数かつ 2 行以上が必要です。HotPDF v2.49.0 以降で利用可能
  • Coons パッチメッシュシェーディング(PDF 1.3+ ISO 32000-1 8.7.4.5.6):THotPDF.RegisterCoonsPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) は Coons パッチの /ShadingType 6 ストリームを宣言します。各パッチは 4 本の三次ベジエ曲線で囲まれ、角ごとに 1 色を持ちます。レンダラーは 4 辺の間に Coons 曲面を当てはめるため、任意に曲がった色付きの四角形が得られ、曲がった経路上のホイルやメタリックのグラデーション、SVG 由来のグラデーションメッシュ、小さな三角形を大量に並べないと近似できない曲線辺を持つ任意の四角形に役立ちます。各パッチは 12 個の制御点(24 個の X+Y Extended 値。境界の周回順に c1..c12、4 隅が c1 / c4 / c7 / c10 で残り 8 個が内側のベジエハンドル)に続き 4 つの角の色(4 * NumComponents 個の Extended 値)を渡すため、Patches のストライドは 24 + 4 * NumComponents です。シェーディングディクショナリーは Type 4 と同じ /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8 を持ちます(Type 5 と違い /VerticesPerRow はありません)。出力されるすべてのパッチは flag = 0(独立パッチ)です。連続フラグ 1 / 2 / 3(エッジ共有)はこの簡易オーバーロードでは公開していません。HotPDF v2.50.0 以降で利用可能
  • 標本 LUT ティント変換付き Separation カラースペース(PDF 1.3+ ISO 32000-1 8.6.6.4 + 7.10.2):THotPDF.RegisterSeparationLUT(ColorantName, AlternateCS, Samples) は RegisterSampledFunction を包み、Function Type 0 ディクショナリーを手で組み立てずに、非線形のティント → 代替カラースペース曲線全体を 8 ビット(M 組)標本のフラットなバイトストリームとして表せます。色の遷移が非線形のときに LUT バリアントを使います。PANTONE Hexachrome 風のティントランプ、ガンマ補正された濃度曲線、印刷機のキャラクタリゼーションに合わせた手描きのトーンカーブ、ICC プロファイル機構なしの sRGB → スポット変換 ICC LUT などが該当します。線形の単一エンドポイントのケースは引き続き v2.45.0 の RegisterSeparation エントリーポイントが担います。AlternateCS には DeviceGray、DeviceRGB、DeviceCMYK を指定できます。Samples の長さは M の正の倍数かつ最低 2 * M バイト必要で、関数が補間できる範囲を持ちます。グリッド点数 S は Length(Samples) / M から推定されます。線形補間は PDF 1.7 の /Order 1 が既定です。通常の SetFillColorSpace + SetFillColor([tint]) パイプラインで使える登録済みカラースペース名(Sep1、Sep2、...)を返します。HotPDF v2.53.0 以降で利用可能
  • Function Type 0(標本関数)の登録(PDF 1.3+ ISO 32000-1 7.10.2):THotPDF.RegisterSampledFunction(Domain, Range, Size, BitsPerSample, Samples, [Order]) は、任意の入力対出力マッピングを M 次元出力標本の正規の N 次元グリッドとして表し、グリッド点間を補間する間接の /FunctionType 0 ストリームを宣言します。ICC プロファイル機構は過剰だが手調整のカラー LUT が欲しい場所、すなわち /TransferFunction(ExtGState の /TR)用のトーンカーブ、線形 Type 2 / 算術 Type 4 の経路を超える /Separation / /DeviceN 用の標本ティント変換、ハーフトーンのしきい値曲線、Function ディクショナリーを取るその他の PDF 構造に使えます。Domain は 2N エントリー(入力次元ごとに [min, max] の組)、Range は 2M エントリー(出力次元ごとに 1 組)、Size は N 個のグリッド点数、BitsPerSample は PDF 1.7 Table 38 に従い 1、2、4、8、12、16、24、32 のいずれか、Samples は生のビットパック標本ストリーム(各標本内では MSB 先頭、標本間のパディングは最終バイトのゼロ埋め以外なし、仕様の標本順ルールに従い入力 0 が最速で変動)、Order は既定 1(線形)で 3(三次スプライン補間、v2.54.0 以降)も受け付けます(PDF 1.7 Table 38)。HotPDF は標本バイト数を ceil(GridPoints * M * BitsPerSample / 8) に対して検証します。Function ディクショナリーが期待される場所にならどこでも取り付けられるよう、間接の THPDFStreamObject を返します。HotPDF v2.52.0 以降で利用可能。三次の /Order 3 とエンドツーエンドの多入力/多出力対応は v2.54.0 以降
  • テンソル積パッチメッシュシェーディング(PDF 1.3+ ISO 32000-1 8.7.4.5.7):THotPDF.RegisterTensorProductPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) はテンソル積パッチの /ShadingType 7 ストリームを宣言します。各パッチは 4 x 4 の双三次ベジエ制御点 p[i][j] の完全なグリッドと、角ごとの 1 色で定義されます。RegisterCoonsPatchMesh(Type 6)に対して、12 個の境界点に加えて 4 つの明示的な内側制御点(p[1][1]、p[1][2]、p[2][2]、p[2][1])が増え、Coons ブレンドの当てはめより細かくパッチ内部を制御できます。SVG のメッシュグラデーションのラウンドトリップや、テンソル積ベジエ曲面を必要とするあらゆるアートワークに有用です。各パッチは 16 個の制御点(32 個の X+Y Extended 値。仕様 Table 88 のストリーム順:p[0][0..3]、p[1][3]、p[2][3]、p[3][3]、p[3][2..0]、p[2][0]、p[1][0]、続いて内側 4 点 p[1][1]、p[1][2]、p[2][2]、p[2][1])に続き 4 つの角の色(p[0][0] / p[0][3] / p[3][3] / p[3][0] の 4 * NumComponents 個の Extended 値)を渡すため、Patches のストライドは 32 + 4 * NumComponents です。出力されるすべてのパッチは flag = 0(独立パッチ)です。このリリースで、ISO 32000-1 8.7.4.5 のメッシュシェーディングファミリー(Type 4 / 5 / 6 / 7)がすべて揃いました。HotPDF v2.51.0 以降で利用可能
  • 注釈の枠線スタイルと Popup の連結(PDF 1.7 12.5.4 / 12.5.6.14):THPDFPage.SetAnnotationBorderStyle(Annot, Width, Style, DashPattern) は、選択した THPDFAnnotBorderStyle(absSolid / absDashed / absBeveled / absInset / absUnderline)で /BS ディクショナリーを取り付けます。THPDFPage.AddPopupAnnotationFor(ParentAnnot, Rect, Open) は双方向に配線された /Popup 注釈を出力し(親の /Popup → ポップアップ、ポップアップの /Parent → 親)、ビューアーが吹き出しのコネクターを描画できます。新しい THPDFPage.LastAnnotation プロパティにより、既存の Add*Annotation 手続きのシグネチャーを変えずにどちらのヘルパーにも渡せます。HotPDF v2.34.0 以降で利用可能
  • 公開鍵セキュリティハンドラー(ISO 32000-1 7.6.4、ISO 32000-2 7.6.5):THotPDF.EnablePubKeyEncryption(seed, KeyType, EncryptMetadata) + THotPDF.AddPubKeyRecipient(envelope) が /Filter /Adobe.PubSec の暗号化ディクショナリーを出力します(V=1 RC4-40 は /SubFilter /adbe.pkcs7.s4、V=2 RC4-128 / V=4 AESV2 は /adbe.pkcs7.s5)。呼び出し側が 20 バイトのランダムシードと受信者ごとの PKCS#7 envelopedData バイナリーblob(Windows CryptoAPI、OpenSSL、pycryptodome などで外部生成)を渡します。HotPDF は ISO 32000-1 7.6.4.3 の記述どおりにファイル暗号化鍵を導出し(シードと各エンベロープを連結した SHA-1)、AES-128 / RC4 ストリームには標準のオブジェクトごとの鍵導出を再利用します。HotPDF v2.33.0 以降で利用可能
  • 読み込み済みページの描画は、Shading Type 4 から 7 までを、標準の座標・コンポーネント・フラグの各ビット幅、バイト境界合わせのレコード、Type 4 の三角形と Type 6 / 7 のパッチ連続フラグ、任意の Function 配列、宣言された ColorSpace 変換、BBox と Background の処理、クリップカリング、バッチ化された Gouraud 塗り、上限付きの適応的 Coons / テンソル積テセレーション込みでデコードします。HotPDF v2.488.0 以降で利用可能

関連項目