"印刷開始位置はプリンタへの印刷とプレビューで異なる"とだけ書いても何かわからないかもしれないのですが、どういうことかというと。
印刷関係にはSystem.Drawing.Printing.PrinterSettingsとか、System.Drawing.Printing.PrintDocumentあたりを使う。
PrintDocumentはどのように描画をするかを制御するクラスで、これのデリゲートのQueryPageSettingsとPrintPgaeにメソッドを登録して実際の描画ロジックを作成する。
印刷だけでなくプレビューも簡単に使えるようになっている。それがSystem.Windows.Forms.PrintPreviewControl, System.Windows.Forms.PrintPreviewDialogだ。
これらのコントロールなどにPrintDocumentを引き渡すと同じロジックが動くので、何も考えなくても画面に表示してくれることになっている。
だけど実際には違う。
何が違うのかというと余白の制御がまったく違う。
Preview系は0, 0の位置から描画できてしまうが、実際のプリンタで0, 0の位置から印字できるものはない。(と思う)
ちなみにうちのプリンタでは0.2inchずつ印字できない。
でも印字では0, 0の位置から印字するとちょうど0.2inch, 0.2inch離れたところから印字される。
結局プレビューでも自前で0.2inch, 0.2inch離れているかのような描画をしなければまったく同じイメージにならないということだ。
"プレビューで確認できているんですが"という投稿をたまに見るが、プレビュー=実際の印字イメージではない以上そこは自分で責任を持ってやってくださいということです。
まぁそうなると精密は余白サイズを取らないと絶対にうまくいかないので、
Wankuma.Interop.GetDeviceCapsWrapperクラス Version1
http://blogs.users.gr.jp/naka/articles/4400.aspx
なんかを利用してください。ということです。
#クラスの解説ちゃんと書かないとねぇ。