前提・実現したいこと
C#.Netで印刷プログラムを作っています。枠内に文字を押し込めるために,縦横の倍率を別々に変えることもあります。これをIPA mj明朝に対応させる方法について質問します。
発生している問題・エラーメッセージ
これまで文字の描画はGraphics#DrawStringを使っており,Graphics#ScaleTransformを使って縦横の倍率を変えています。しかしGraphics#DrawStringでは異体字がうまく表示されないようです。
TextRenderer#DrawTextなら正しい文字が描画できますが,印刷には対応していないらしい。それでも無理やり座標を合わせて印刷することはできたが,縦横の倍率を別々に変える方法がわかりません。
SharpDXを使えば異体字も縦横の拡大もできますだが,印刷するにあたってHDCの取得の仕方がわかりません。フォームに印字するのならPaintEventArgsのGraphicsからgetHdcを呼べばいいのですが,印刷のためにPrintPageEventArgsのGraphicsからGetHdcを呼んでもうまくいきません。
質問したいこと
上記問題のどれかを解決する方法をお尋ねしたいのです。たとえば
- DrawStringで異体字が印字する方法
- DrawTextで縦横の倍率を別々に変える方法
- SharpDXで印刷するときにHDCを取得する方法
のどれか(あるいは別のアプローチ)について教示いただければ助かります。
追記
DrawString, DrawTextでの例はこんな感じです。間違い探しみたいですが,1文字目は2点しんにょう,2文字目は1点しんにょう,3文字目は最後の画がとめでなくはらいです。
C#
1String s = "鎹鎹????鎹????"; 2Font font = new Font("IPAmj明朝", 32); 3Brush brush = new SolidBrush(Color.Black); 4Rectangle rect1 = new Rectangle(0, 0, 200, 60); 5Rectangle rect2 = new Rectangle(0, 60, 200, 60); 6e.Graphics.DrawString(s, font, brush, rect1); 7TextRenderer.DrawText(e.Graphics, s, font, rect2, Color.Black);