XpsDocument クラスの XPS ドキュメントをビットマップに描画すると、特定の文字が描画されない
こんにちは、Platform SDK (Windows SDK) サポートチームです。
今回は、プログラムから XPS ドキュメントをビットマップに描画した時に、XPS ドキュメント内の特定の文字が描画されない問題についてご案内します。
現象
プログラムから、XPS ドキュメントを XpsDocument クラスで開き、RenderTargetBitmap クラスでビットマップに描画すると、XPS ドキュメント内の特定の文字が描画されない問題が発生します。
この問題は、.NET Framework 4.0 ~ 4.7 をターゲットにビルドしたプログラムを、Windows 8.1 上で実行した場合に発生することが確認されています。
また、描画されない文字には以下の特徴があることが、現在までの調査で判明しています。
- 全角の記号 (例: 「)
- 類似のグリフが半角記号としても存在する (例: [)
- XPS ドキュメント内で、単独の Glyphs エレメントにより表現されている
以下は、この問題が発生する XPS ドキュメントの実装例と、そのビットマップ描画結果の例です。
- XPS ドキュメントの実装例
<Glyphs RenderTransform="x,x,x,x,x,x" Fill="#000000" UnicodeString="「あいうえお」" OriginY="0" OriginX="0" FontRenderingEmSize="1" FontUri="/Documents/1/Resources/Fonts/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.odttf"/>
<Glyphs RenderTransform="x,x,x,x,x,x" Fill="#000000" UnicodeString="「" OriginY="0" OriginX="0" FontRenderingEmSize="1" FontUri="/Documents/1/Resources/Fonts/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.odttf"/>
<Glyphs RenderTransform="x,x,x,x,x,x" Fill="#000000" UnicodeString="かきくけこ」" OriginY="0" OriginX="0" FontRenderingEmSize="1" FontUri="/Documents/1/Resources/Fonts/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.odttf"/>
- ビットマップに描画された結果の例 (img.ng.jpg)
以下は、この問題が発生しない XPS ドキュメントの実装例と、そのビットマップ描画結果の例です。
- XPS ドキュメントの実装例
<Glyphs RenderTransform="x,x,x,x,x,x" Fill="#000000" UnicodeString="「あいうえお」" OriginY="0" OriginX="0" FontRenderingEmSize="1" FontUri="/Documents/1/Resources/Fonts/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.odttf"/>
<Glyphs RenderTransform="x,x,x,x,x,x" Fill="#000000" UnicodeString="「かきくけこ」" OriginY="0" OriginX="0" FontRenderingEmSize="1" FontUri="/Documents/1/Resources/Fonts/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.odttf"/>
- ビットマップに描画された結果の例 (img.ok.jpg)
回避策
以下のいずれかをご検討ください。
- 回避策 1. 前述した特徴を避けて、全角記号が単独の Glyphs にならないように XPS ドキュメント内で文字を表現してください。
- 回避策 2. Windows 8.1 以外の OS、たとえば Windows 10 をご利用ください。
状況
マイクロソフトでは、この問題について調査しています。
進展があり次第、本ブログを更新予定です。