ページングと印刷

自動ページング

ワークシートを印刷する際、ReoGridは自動的にページングを実行します。ページング操作はワークシートをスキャンし、ページング設定に従って各ページの印刷範囲を決定します。例えば、以下の画像は縦方向にページングされたワークシートを示しています。

108

Excelと同様に、ReoGridは各ページに収まるセルの最大数を検出します。完全に印刷できないセルは次のページに移動されます。以下に示す通りです。

109

自動ページングの実行またはページ区切りのリセット

いつでも自動ページングを実行したり、現在のページ区切りをリセットするには:

sheet.AutoSplitPage();

注意: このメソッド自体は非常に高速に実行されます(< 10 ms)が、リモートプリンターがデフォルトプリンターに設定されている場合、リモートプリンターからの用紙サイズの取得に100 ms以上かかることがあるため(ネットワーク環境に依存)、遅くなる場合があります。

ページ区切り線の表示

画面上にページ区切り線を表示するには:

sheet.EnableSettings(WorksheetSettings.View_ShowPageBreaks);

結果: 120

印刷可能な境界の自動チェック

印刷範囲が指定されていない場合、ReoGridは自動的にセルの使用範囲を検出し、それを印刷範囲として設定します。

121

印刷範囲の変更

ワークシートのPrintableRangeプロパティを使用して印刷範囲を変更します。

sheet.PrintableRange = new RangePosition(1, 1, 9, 9);

122

印刷範囲が用紙サイズより大きい場合、自動的に分割されます。印刷範囲外のセルは印刷されません。

ページング順序の変更

PrintSettings.PageOrderプロパティを使用してページングの方向を変更します。

112

sheet.PrintSettings.PageOrder = PrintPageOrder.DownThenOver;

ページ設定の変更

ワークシートのPrintSettingsプロパティを使用して用紙設定を変更します。

// change page to landscape
sheet.PrintSettings.Landscape = true;

// set page margins
sheet.PrintSettings.Margins = new PageMargins(5);

例:横向きへの自動ページング

123

印刷スケーリング

PrintSettingsPageScalingプロパティを使用して印刷スケーリングを設定できます。

sheet.PrintSettings.PageScaling = 0.7f;    // scale to 70%

注意: ページスケーリングが変更されると、ワークシートは自動的に再ページングされます。

ページ区切りの挿入

ページ区切りを挿入するには、ワークシートのRowPageBreaksおよびColumnPageBreaksプロパティを使用します。

// insert page break
sheet.ColumnPageBreaks.Add(5);

スプレッドシートが2ページに分割されます:

124

ユーザーページ区切りとシステムページ区切り

ページ区切りには2種類あります。実線はユーザーページ区切りで、AutoSplitPageメソッドまたはユーザー操作によって生成されます。破線はシステムページ区切りで、ワークシートを複数ページに分割するためにReoGridによって自動的に挿入されます。

125

ページ区切りの変更

ページ区切りのインデックスを変更または移動するには(ユーザーまたはシステムページ区切りを問わず)、以下のメソッドを使用します。

void sheet.ChangeColumnPageBreak(int oldIndex, int newIndex);
void sheet.ChangeRowPageBreak(int oldIndex, int newIndex);

ページ区切りが変更されると、ユーザーページ区切りになり、ReoGridによって自動的に更新されなくなります。

ページの反復処理

ワークシートのIteratePrintPagesメソッドは、すべての印刷ページを反復処理するために使用されます。このメソッドは各ページの範囲位置を返します。

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 => { ... });

ページング順序が指定されていない場合、印刷設定のページ順序が使用されます。

エンドユーザーによるページ区切りの変更/調整を無効にする

エンドユーザーがマウスでページ区切りのインデックスを変更することを防ぐには、ワークシートの設定を行います。

sheet.SetSettings(WorksheetSettings.Behavior_AllowUserChangingPageBreaks, false);

印刷セッション

印刷セッションは、ワークブック全体または指定したワークシートを印刷するために使用されます。ワークブック全体または複数のワークシートを印刷するには、ワークブックインスタンス(コントロール)から印刷セッションを作成します。単一のワークシートを印刷するには、そのワークシートから印刷セッションを作成します。

263

単一ワークシートの印刷

var session = worksheet.CreatePrintSession();
session.Print();

ワークブック全体(全ワークシート)の印刷

var session = reoGridControl.CreatePrintSession();
session.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);
  }
}

印刷

以下のコードは、デフォルトの印刷設定でワークシートを印刷します。

var session = sheet.CreatePrintSession();
session.Print();

標準印刷ダイアログを使用した印刷

以下のコードは、標準印刷ダイアログを表示し、指定されたワークシートを印刷します。

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);
  }
}

プログラムでプリンターを選択

PrintSettings.PrinterNameを使用して、ダイアログを表示せずに出力を特定のプリンターに直接送信します。null(デフォルト)に設定すると、システムのデフォルトプリンターが使用されます。

sheet.PrintSettings.PrinterName = "Microsoft Print to PDF";

var session = sheet.CreatePrintSession();
session.Print();

グリッド線の印刷

デフォルトでは、グリッド線は印刷されません。ShowGridLinestrueに設定すると、印刷出力にグリッド線が含まれます。

sheet.PrintSettings.ShowGridLines = true;

余白インジケーターの表示

ShowMarginstrueの場合、各印刷ページの端に余白境界マークが描画されます(印刷プレビューおよび印刷出力で表示されます)。

sheet.PrintSettings.ShowMargins = true;

用紙サイズの設定

PaperNameを使用して、定義済みの用紙サイズから選択します。文字列はPaperManager.PaperSizesInchのキーと一致する必要があります。

一般的な値:"A3""A4""A5""Letter""Legal""Ledger""B4""B5""JIS_B4""JIS_B5"

sheet.PrintSettings.PaperName = "A4";

PaperNameが既知のサイズに設定されている場合、PaperWidthPaperHeightはデフォルト値のままで構いません。PaperName"Custom"に設定すると、寸法を明示的に指定できます。

sheet.PrintSettings.PaperName   = "Custom";
sheet.PrintSettings.PaperWidth  = 6.0f;   // inches
sheet.PrintSettings.PaperHeight = 9.0f;   // inches

すべてのサイズはインチ単位です。Landscapeフラグは、印刷可能な領域を計算する際に幅と高さを自動的に入れ替えます。

利用可能な用紙サイズ

カテゴリ名前
ISO AシリーズA0 -- A8
ISO BシリーズB0 -- B10
ISO CシリーズC2 -- C6
JIS BシリーズJIS_B0 -- JIS_B12
北米Letter, Legal, Ledger, Tabloid, Executive
ANSIANSI_C, ANSI_D, ANSI_E
その他D0, SRA0 -- SRA4, RA0 -- RA2, Custom

ページ余白の設定

PageMarginsは4つの独立した余白値をインチ単位で格納します。単一値コンストラクタですべての辺を一度に設定するか、4値コンストラクタで個別に制御します。

// All four margins = 1 inch
sheet.PrintSettings.Margins = new PageMargins(1f);

// Top=0.5, Bottom=0.5, Left=1, Right=1 (inches)
sheet.PrintSettings.Margins = new PageMargins(0.5f, 0.5f, 1f, 1f);

// Adjust individual sides
var m = sheet.PrintSettings.Margins;
m.Left  = 0.75f;
m.Right = 0.75f;
sheet.PrintSettings.Margins = m;

// Remove all margins
sheet.PrintSettings.Margins = PageMargins.Empty;

すべてのページ区切りをリセット

ResetAllPageBreaks()を呼び出して、すべてのユーザー定義の区切りをクリアし、自動ページングをゼロから再実行します。

sheet.ResetAllPageBreaks();

これは、PrintableRangeのクリア、RowPageBreaksColumnPageBreaksからすべてのエントリの削除、およびAutoSplitPage()の呼び出しと同等です。

PrintableRange変更イベント

PrintableRangeChangedにサブスクライブして、印刷範囲が変更されるたびに通知を受け取ります。

sheet.PrintableRangeChanged += (s, e) =>
{
    Console.WriteLine("Printable range: " + sheet.PrintableRange.ToAddress());
};

PrintSettingsプロパティリファレンス

プロパティデフォルト説明
PrinterNamestringnull出力プリンター名。null = システムデフォルト。
PaperNamestring"Letter"用紙サイズ名(PaperManager.PaperSizesInchのキー)。
PaperWidthfloat8.5f用紙幅(インチ)(PaperName"Custom"の場合に使用)。
PaperHeightfloat11f用紙高さ(インチ)(PaperName"Custom"の場合に使用)。
Landscapeboolfalsetrueで横向き。
MarginsPageMarginsnew PageMargins(1f)ページ余白(インチ)。
PageOrderPrintPageOrderDownThenOverページ順序:DownThenOverまたはOverThenDown
PageScalingfloat1fスケール倍率(0.1 -- 4.0)。1f = 100%。
ShowGridLinesboolfalseセルのグリッド線を印刷。
ShowMarginsboolfalseページに余白境界マークを描画。

ページの内容は役に立ちましたか?