質問: C#で印刷をするソフトを作っています。 プレビューに PrintPreviewControl を使っていますが、プレビューと印刷時でずれが生じます。 調べたところ、Graphics の原点がプレビューでは用紙左上になっているのに対し、プリンタでは印刷可能領域の左上になっていました。 そのため、画面では良好な表示なのに、印刷した時には印刷不可能な幅だけ右下にずれてしまいます。 この大きさについては、PageSettings.HardMarginX および PageSettings.HardMarginY で取得できますので、PrintDocument.OriginAtMargins を False とし、同じく Margins を (0, 0, 0, 0) として、Graphics.TranslateTransform() メソッドを使って左上にずらすことで良好な印刷結果を得ることができます。 しかし、そうすると今度はプレビュー画面で左上に寄ってしまいます。 このずれを補正するための何か簡単な方法がありますでしょうか? もしなければ Graphics がプレビュー画面なのかプリンタのものなのかによって条件分岐して補正しようと思いますが、それを判別する方法がありますでしょうか?
回答: 印刷、およびプレビューには同じ PrintDocument を使っていますが、これを printDocument1 とすると、printDocument1.PrintController.IsPreview が、印刷時とプレビュー時で異なる値を持つことがわかりました。 よって、あまり美しくない方法ではありますが、この値をもとにして描画位置を変えることにより、ずれを補正することとします。 ありがとうございました。