埋め込みフォント
フォントを埋め込む方法は、ドキュメントとドキュメントに含まれるフォントを別のコンピューターに送信するためのファイルにバンドルする手法です。 フォントを埋め込む場合、送信されたファイルで指定されたフォントが、ファイルを受信しているコンピューターに存在することが保証されます。 ただし、ほとんどのフォントは一度に 1 台のコンピューターにのみライセンスされるため、すべてのフォントをコンピューターからコンピューターに移動できるわけではありません。 埋め込むことができるのは TrueType フォントと OpenType フォントのみです。
アプリケーションは、ユーザーから要求された場合にのみ、ドキュメントにフォントを埋め込む必要があります。 埋め込みフォントを含むドキュメントと共にアプリケーションを配布したり、アプリケーション自体に埋め込みフォントを含めることはできません。 アプリケーションが任意の形式でフォントを配布するときは常に、フォントの所有者の所有権を確認する必要があります。
フォントの埋め込みが許可されていないフォントを埋め込んだり、フォントの埋め込みに関する次のガイドラインに従わなかったりすることは、フォント ベンダーの所有権またはユーザー ライセンス契約に違反する可能性があります。 フォントのライセンスでは、インストール先のコンピューターにインストールして使用するフォントの読み取り/書き込みアクセス許可のみを付与できます。 または、ライセンスが読み取り専用のアクセス許可を与える場合があります。 読み取り専用のアクセス許可を使用すると、コピー先のコンピューターでドキュメントを表示および印刷できます (ただし、変更することはできません)。読み取り専用の埋め込みフォントを持つドキュメント自体は読み取り専用です。 読み取り専用の埋め込みフォントは、ドキュメントからバンドル解除されず、コピー先のコンピューターにインストールされない場合があります。
アプリケーションは、GetOutlineTextMetrics 関数を呼び出し、OUTLINETEXTMETRIC 構造体の otmfsType メンバーを調べることで、ライセンスの状態を確認できます。 otmfsType のビット 1 が設定されている場合、フォントの埋め込みは許可されません。 ビット 1 がクリアな場合は、フォントを埋め込むことができます。 ビット 2 が設定されている場合、埋め込みは読み取り専用です。
TrueType フォントを埋め込むには、アプリケーションは、GetFontData 関数を使用してフォント ファイルを読み取ることができます。 GetFontData の dwTable と dwOffset パラメーターを 0L に設定し、cbData パラメーターを 1L に設定すると、アプリケーションが最初からフォント ファイル全体を読み取ることができます。
文字の幅とフォント データが存在する場所に応じて、OpenType フォントを埋め込むためのいくつかの関数を使用できます。 デバイス コンテキストに存在する OpenType Unicode フォントを埋め込むには、アプリケーションで TTEmbedFont使用できます。 デバイス コンテキストに存在する OpenType UCS-4 フォントを埋め込むには、アプリケーションで TTEmbedFontEx使用できます。 フォント ファイルに存在する OpenType Unicode フォントを埋め込むには、アプリケーションで TTEmbedFontFromFile使用できます。 OpenType フォントの埋め込みの詳細については、「フォント埋め込みリファレンス」を参照してください。
アプリケーションは、フォント データを取得した後、該当する任意の形式を使用して、ドキュメントにデータを格納できます。 ほとんどのアプリケーションは、埋め込みフォントを一覧表示し、埋め込みが読み取り/書き込み専用か読み取り専用かを示す、ドキュメント内のフォント ディレクトリを構築します。 アプリケーションでは、OUTLINETEXTMETRIC 構造体の otmpStyleNameと otmFamilyName メンバーを使用して、フォントを識別できます。
埋め込みフォントに対して読み取り専用ビットが設定されている場合、アプリケーションは、ドキュメントに格納する前にフォント データを暗号化する必要があります。 暗号化方法は複雑である必要はありません。たとえば、XOR 演算子を使用してフォント データをアプリケーション定義定数と組み合わせるのは十分で高速です。