準備
(なし)
デザイン
1. フォーム (Form1) にボタン (button1) を配置します。
2. フォーム (Form1) にレポートビューア (reportViewer1) を配置します。
サンプルコード (C#)
// 名前空間の追加
using System.Drawing.Printing;
// コード
private void button1_Click(object sender, EventArgs e)
{
// 変数の宣言
PageSettings ps = new PageSettings(); // プリンタ設定オブジェクト
// 余白の設定
ps.Margins.Left = (int)(10 / 10 / 2.54 * 100); // 約10mm
ps.Margins.Right = (int)(20 / 10 / 2.54 * 100); // 約20mm
ps.Margins.Top = (int)(30 / 10 / 2.54 * 100); // 約30mm
ps.Margins.Bottom = (int)(40 / 10 / 2.54 * 100); // 約40mm
// 用紙サイズの設定
foreach (PaperSize PSize in reportViewer1.PrinterSettings.PaperSizes)
{
if (PSize.ToString().Contains("B4"))
{
ps.PaperSize = PSize;
break;
}
}
// 給紙方法の設定
foreach (PaperSource PSource in reportViewer1.PrinterSettings.PaperSources)
{
if (PSource.ToString().Contains("MP"))
{
ps.PaperSource = PSource;
break;
}
}
// 印刷の向きの設定
ps.Landscape = true;
// ReportViewer オブジェクトの設定
reportViewer1.PrinterSettings.PrinterName = "EPSON LP-S5000";
reportViewer1.SetPageSettings(ps);
}
解説
レポートビューアのページ設定ダイアログの内容を設定しています。 使用するプリンタはこのダイアログには表示されていませんが、ReportViewer コントロールに直接設定できます。尚、Windows 7 環境ではプリンタの変更はできませんが、Windows XP 環境では、このダイアログに [プリンタの設定] ボタンが表示され、プリンタの変更が可能です。 用紙のサイズ、給紙方法、印刷の向き、余白は直接 ReportViewer コントロールに設定ができません。一度 PageSettings オブジェクトを作成し、そのプロパティを変更していきます。そして、最後に ReportViewer コントロールに PageSettings オブジェクトを設定します。この際、ReportViewer コントロールが null の状態の場合は、設定は反映されません。事前に ReportViewer コントロールにデータセットを割り当てデータが表示されている状態にしておく必要があります。そのため、これらのページ設定はデータの設定の後に行う必要があります。 このサンプルでは、EPSON LP-S5000 というプリンタを設定しています。用紙サイズは B4、給紙方法は MP トレイ (手差し)、印刷の向きは横、余白は左/右/上/下の順に 10mm/20/mm/30mm/40mm に設定しています。 PageSettings オブジェクトに設定する余白の単位は 1/100 インチです。そのため、変換の際に誤差が発生するため、実際の指定値が表示されるとは限りません。
結果

動作確認環境
Visual Studio 2015 Professional (C# 6.0)