【C#】プリンタ・印刷に関する処理 ~PrintDocument / ReportDocument の利用 ~

■ プリンタ

 * PrintDocument を利用する

【1】 印刷に関するサンプル

デザイン部

 * printDocument1 x 1 
 * printDialog1 x 1
  + Document : printDocument1
  + UseEXDialog : True
 * printPreviewDialog1 x 1
  + Document : printPreviewDialog1
 * pageSetupDialog1 x 1
  + Document : printDocument1
  + EnableMetric : True

サンプル

public partial class Form1 : Form
{
    private String printText = String.Empty;
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (DialogResult.OK == this.printDialog1.ShowDialog())
        {
            this.SetPrintDocument();
            this.printDocument1.Print();
        }
    }

    private void printDocument1_PrintPage(
        object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        Font font = new Font("MS ゴシック", 12);
        e.Graphics.DrawString(this.textBox1.Text,
            font, Brushes.Black, new Point(100, 100));
    }

    private void button2_Click(object sender, EventArgs e)
    {
        this.SetPrintDocument();
        this.printPreviewDialog1.ShowDialog();
    }

    private void button3_Click(object sender, EventArgs e)
    {
        this.pageSetupDialog1.ShowDialog();
    }

    private void SetPrintDocument()
    {
        this.printText = this.textBox1.Text;
        this.printDocument1.DocumentName = "Sample";
    }
}

【2】インストールされているプリンタをコンボボックスに表示

サンプル

#region フォームロードイベント
/// <summary>
/// フォーム初期起動時に関する処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
    PrintDocument pd = new PrintDocument();
    
    int defalutIndex = 0;
    foreach(string printerName in PrinterSettings.InstalledPrinters)
    {
        // コンボボックスの項目にプリンタ名を追加
        comboBox1.Items.Add(printerName);

        // 通常使用しているプリンタをデフォルト表示
        if (printerName.Equals(pd.PrinterSettings.PrinterName))
        {
            comboBox1.SelectedIndex = defalutIndex;
        }
        defalutIndex++;
    }
}
#endregion

【3】クリスタルレポートを印刷する

 * ReportDocument を利用する

サンプル

// 印刷する帳票のレポートドキュメント
ReportDocument reportDocument = null;

try
{
    #region レポートファイル(.rpt)パスの取得
    // レポートファイルパスの取得
    string path = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
    path = path + "xxx.rpt";

    #region レポートをロード
    reportDocument = new ReportDocument();
    reportDocument.Load(path);
    #endregion

    #region 印刷設定
    // 使用するプリンタの選択
    reportDocument.PrintOptions.PrinterName = comboBox1.Text;

    // 用紙の向きを横に設定
    reportDocument.PrintOptions.PaperOrientation =
        CrystalDecisions.Shared.PaperOrientation.Landscape;
    
    #endregion

    // データセットのバインド
    reportDocument.SetDataSource(dataSet1);

    /*
     * 印刷実行
     *
     * 引数は、左から「印刷する部数」、「ページ単位」
     * 「印刷する最初のページ」、「印刷する最後のページ」
     *
     * すべてのページを印刷するには、
     * 「印刷する最初のページ」と 「印刷する最後のページ」を 0 に設定する。
     */
    reportDocument.PrintToPrinter(1, false, 0, 0);
}
catch (Exception ex)
{
}

関連記事

ラベル印刷 ~ PrintDocumentを使って ~

http://blogs.yahoo.co.jp/dk521123/33170202.html