Xpsファイルを印刷するプログラムを作っていると変な現象に出会った。2日ほどな悩んだがやっと原因が分かったのでメモしておく。

【症状】

MSゴシック体を使ったXPSドキュメントを作成する。(これはワードパッドなどで適当に文書を作成して、印刷にMicrosoft XPS Document Writerを使ってXPSファイルに出力したものである。)これをVS2010にて自前で作成したプログラムから印刷するとなぜか明朝体で印刷される。
対象の.net frameWorkが3.5の時にだけ発生する。
4.0では発生しない。実行PCがWindowXp(32bit)では発生しなかった。

【プログラム環境】
OS:Windows7 (x64)  SP1
Visual Studio 2010
.net FrameWork3.5SP1用

【プログラム(印刷部)】
きわめて単純な印刷プログラム。ボタンを押すと下記のコードが実行されるようにしているだけ。


PrintDialog dialog = new PrintDialog();
 bool? ret=dialog.ShowDialog();
 if (ret == true) {
XpsDocument document = new XpsDocument(_filePath, FileAccess.Read);
FixedDocumentSequence seq = _doc.GetFixedDocumentSequence();
dialog.PrintDocument(seq.DocumentPaginator, "これは標準印刷");
 }

【原因】
マイクロソフトのバグ

文書番号: 2566651
[FIX] .NET Framework 3.5 Service Pack 1 を対象とする Windows Presentation Foundation アプリケーション内の XpsDocumentWriter クラスを使用するときに XPS 文書のテキストが異なるフォントで印刷される

http://support.microsoft.com/kb/2566651/

【対処方法】
基本的に次のサービスパックを待つ。またはHotFixを申請する。
さてどうしようかなぁ。今回はframework4.0は使ってはいけないからなぁ
UIゴシックは問題ないみたいなのでこれを使おうかなぁ。