ページングと印刷
自動ページング
ワークシートを印刷する前に、ワークシートを用紙のサイズによってページングする必要があります。ReoGrid はワークシートのページングを自動的に行います。
ページングをする際に、縦優先と横優先の二つの方法でページングできます。
自動ページングは、用紙のサイズによって各ページに印刷できるセルの範囲を決めます。セルの一部が用紙の外に出てしまう場合、そのセルが次のページに印刷されます。
例えば以下の例では、赤い罫線が用紙のサイズ、D 列セルの一部が赤い罫線の外に出てしまったため、最終的に Page 1 の有効印刷範囲は青い罫線の部分となります。
手動ページング
自動ページングの後、画面での操作またはプログラムで手動ページングを実行できます。手動ページングで自動ページングの結果を編集できます。指定した位置で改ページの挿入、移動、及び削除もできます。
自動ページングのやり直しと手動ページングのリセット
自動ページングをもう一度行いたい場合、または手動ページングをリセットしたい場合、以下のメソッドを呼び出します。
sheet.AutoSplitPage();
このメソッドは単体で高速に動作するよう設計しています(平均動作時間は 10ms 以下)。ただし、Windows 環境のプリンター設定によって動作スピードが落ちる場合があります。特に遠隔プリンターがデフォルトプリンターに設定されている場合動作スピードが200ms程度まで落ちることがあります。
ページングした結果の表示
ページングした結果を画面に表示したい場合、ワークシートの設定 WorksheetSettings.View_ShowPageBreaks
を true
に設定します。
sheet.SetSettings(WorksheetSettings.View_ShowPageBreaks, true);
ページングした結果を非表示にしたい場合、WorksheetSettings.View_ShowPageBreaks
を false
に設定します。
sheet.SetSettings(WorksheetSettings.View_ShowPageBreaks, false);
印刷範囲境界の自動検出
ワークシートの PrintableRange
を利用して印刷範囲を指定できます。印刷範囲を指定しない場合、ReoGrid はワークシートにある内容の境界を検出し印刷範囲を自動的に設定します。
例えば K11
セルに「A」のテキストがある場合、このワークシートの印刷範囲は A1:K11
となります。
印刷範囲の指定
ワークシートのプロパティ PrintableRange
を利用して印刷範囲を指定できます。
sheet.PrintableRange = new RangePosition("B2:J10");
印刷範囲を B2:J10
に設定したため、K11
セルのテキスト「A」が印刷されません。
ページングの方向
ReoGrid では縦優先と横優先、二つの優先方向でページングできます。
- 縦優先(Down, then over)-まず縦方向にページングし、次に横に移動して再び縦方向にページングする
- 横優先(Over, then down)-まず横方向にページングし、次に下に移動して再び横方向にページングする
ページング方向の設定には、以下のコードを利用します。PrintPageOrder
はページング方向の列挙体です。
sheet.PrintSettings.PageOrder = PrintPageOrder.DownThenOver;
用紙設定
ワークシートの PrintSettings
プロパティは用紙設定のためのオブジェクトです。
// 用紙を横向きに設定
sheet.PrintSettings.Landscape = true;
// 用紙の余白を設定
sheet.PrintSettings.Margins = new PageMargins(5);
用紙を横向きに設定するとセル K11
が印刷範囲の中に入ります。
印刷の拡大縮小
印刷の拡大縮小を設定するには、PrintSettings
プロパティの PageScaling
を0.1~4の小数に設定します。1に設定すると元のサイズになります。
sheet.PrintSettings.PageScaling = 0.7f; // 70%に縮小
印刷の拡大縮小を変更した場合、1ページあたりに印刷可能なセル数が変化しますので、自動ページングが自動的に行われます。
改ページの挿入
自動または手動ページングした結果が RowPageBreaks
(行の改ページ配列)と ColumnPageBreaks
(列の改ページ配列)に保存されます。
改ページを挿入するには、RowPageBreaks
または ColumnPageBreaks
配列の Add
メソッドを利用します。
// 5列目の後に改ページを挿入
sheet.ColumnPageBreaks.Add(5);
自動ページングと手動ページングの表示
自動ページングした結果が破線で表示されます。手動ページングした結果は実線で表示されます。
改ページの移動
改ページを移動したい場合、ワークシートの ChangeRowPageBreak
と ChangeRowPageBreak
メソッドを利用します。この二つのメソッドの定義は以下の通りです。
void sheet.ChangeColumnPageBreak(int oldIndex, int newIndex);
void sheet.ChangeRowPageBreak(int oldIndex, int newIndex);
一つ目のパラメータが移動元のインデックス、二つ目のパラメータが移動先のインデックスです。
移動元は、自動ページングと手動ページングの両方の結果に指定できます。
改ページの削除
改ページを削除したい場合、RowPageBreaks
または ColumnPageBreaks
配列の Remove
メソッドを利用します。
全てのページを反復
ワークシートの IteratePrintPage
メソッドを利用して全てのページを反復できます。反復子は各ページにおける印刷範囲のオブジェクトです。
sheet.IteratePrintPages( range => {
Console.WriteLine("Page range is: " + range.ToAddress());
return true;
});
実行結果は以下の通りです。
Page range is: A1:E11
Page range is: F1:K11
印刷設定と違いページング方向での反復もできます。
sheet.IteratePrintPages(PrintPageOrder.OverThenDown, range => { ... });
ページング方向を省略した場合、印刷設定のページング方向で反復します。
画面での改ページ編集を禁止する
画面での改ページの編集を禁止したい場合、ワークシートの設定 WorksheetSettings.Behavior_AllowUserChangingPageBreaks
を false
に設定します。
sheet.SetSettings(WorksheetSettings.Behavior_AllowUserChangingPageBreaks, false);
印刷セッション
印刷を実行するには印刷セッションを作成します。
単一のワークシートを印刷
ワークシートの CreatePrintSession
メソッドを利用して印刷セッションを作成します。印刷セッションの Print
メソッドを呼び出してワークシートをプリンターに出力します。
var session = worksheet.CreatePrintSession();
session.Print();
全てのワークシートを一斉に印刷する
ワークブック(ReoGrid コンポーネント)の CreatePrintSession
メソッドを利用して印刷セッションを作成します。印刷セッションの Print
メソッドを呼び出してワークブックをプリンターに出力します。
var session = reoGridControl.CreatePrintSession();
session.Print();
指定した複数のワークシートを印刷する
手順は以下の通りです。
- ワークブック(ReoGrid コンポーネント)の
CreatePrintSession
メソッドを利用して印刷セッションを作成します。 - 印刷セッションの
Worksheets
配列に指定したワークシートを追加します。 - 印刷セッションの
Print
メソッドを呼び出して指定したワークシートをプリンターに出力します。
ソースコードは以下の通りです。
var session = reoGridControl.CreatePrintSession();
session.Worksheets.Clear();
session.Worksheets.Add(grid.Worksheets["Sheet1"]);
session.Worksheets.Add(grid.Worksheets["Sheet3"]);
session.Print();
印刷プレビュー
.NET フレームワークに搭載されている印刷プレビューダイアログで印刷プレビューを表示できます。
var sheet = reoGridControl.CurrentWorksheet;
using (var session = sheet.CreatePrintSession())
{
using (PrintPreviewDialog ppd = new PrintPreviewDialog())
{
ppd.Document = session.PrintDocument;
ppd.SetBounds(200, 200, 1024, 768);
ppd.PrintPreviewControl.Zoom = 1d;
ppd.ShowDialog(this);
}
}
システムの印刷画面でプリンターを選択して印刷する
システムの印刷画面を表示して、プリンターを選択して印刷を実行できます。
System.Drawing.Printing.PrintDocument doc = null;
try
{
doc = worksheet.CreatePrintSession().PrintDocument;
}
catch (Exception ex)
{
MessageBox.Show(this, ex.Message, this.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
using (var pd = new System.Windows.Forms.PrintDialog())
{
pd.Document = doc;
pd.UseEXDialog = true; // in 64bit Windows
if (pd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
doc.PrinterSettings = pd.PrinterSettings;
doc.Print();
}
}
if (doc != null) doc.Dispose();
システムの用紙設定画面でワークシートの用紙設定を編集する
システムの用紙設定画面を表示し、その設定結果をワークシートの用紙設定に反映できます。
using (PageSetupDialog psd = new PageSetupDialog())
{
// transform ReoGrid page settings to System page settings
psd.PageSettings = worksheet.PrintSettings.CreateSystemPageSettings();
psd.AllowMargins = true;
psd.AllowPrinter = true;
psd.AllowPaper = true;
psd.EnableMetric = true;
if (psd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
// transform System page settings to ReoGrid page settings
worksheet.PrintSettings.ApplySystemPageSettings(psd.PageSettings);
}
}