すらすらプログラマーへのお問い合わせ
すらすらのブログ
アクセス数  累計:000,569,497  昨日:000,000,148  本日:000,000,018
Loading
印刷
.NET プログラミング
プロパティグリッド
印刷
リストボックス
スレッド
リストビュー
インストーラー
やってみよう!

できるVisual Studio 2015 Windows /Android/iOS アプリ対応

独習C# 第3版

VisualBasic2013パーフェクトマスター (Perfect Master SERIES)

プログラミング.NET Framework 第4版 (Microsoft Press)

VisualBasic2013逆引き大全555の極意

猫でもわかるWindowsプログラミング 第4版 (猫でもわかるプログラミング)

VisualC#2013逆引き大全555の極意

印刷の基本 最終更新:2010/07/15
【Amazon ランキング:本 - ビジネス・経済】

世間ではペーパーレス化を進めるためににコンピュータを導入する事例が多いですが、実際のところ紙で印刷してほしいという要望は絶えないのが現実です。しかしながら、.NETの印刷機能はお世辞にも優れているとはいえずワードやエクセルのような整った書式のドキュメントを出力するのはかなりの労力を必要とします。
この章では少しでも効率よく印刷プログラムを組めるような方法を紹介します。

印刷を行うには PrintDocument オブジェクトを使用します。まず PrintDocument のインスタンスを作成して印刷に必要な基本的な設定をした後、PrintPage イベントにて実際の印刷を行います。

用紙の向きの設定
用紙の向きは DefaultPageSetting.Landscape プロパティで設定します。 true を設定すると横向き、 false を設定すると縦向きに印刷されます。
[VB]
doc.DefaultPageSettings.Landscape = False

[C#]
doc.DefaultPageSettings.Landscape = false;
用紙サイズの設定
.NETには、用紙のサイズを定義した PrinterKind 列挙体が用意されているのですが、プリンタによってサポートしている用紙サイズが異なるのでこの値を単純に設定することはできません。そこで使用したい用紙サイズがプリンターでサポートしているかを調べつつ用紙サイズの設定する必要があります。
[VB]
For Each ps As PaperSize In doc.PrinterSettings.PaperSizes
    
If ps.Kind = PaperKind.A4 Then
        doc.DefaultPageSettings.PaperSize = ps
        
Exit For
    End If
Next

[C#]
foreach
 (PaperSize ps in doc.PrinterSettings.PaperSizes)
{
    if (ps.Kind == PaperKind.A4)
    {
        doc.DefaultPageSettings.PaperSize = ps;
        
break;
    }
}
印刷イベント処理
印刷は PrintPage イベントをハンドルしてその中で処理します。イベント引数から グラフィックスオブジェクトを取得してそれに対して描画をおこないます。HasMorePage プロパティに true を設定するとことにより印刷イベントが連続して発生します。印刷を終了する場合には HasMorePage プロパティに false を設定します。
[VB]
AddHandler doc.PrintPage, AddressOf doc_PrintPage

[C#]
doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
フォームの作成
Form1 に ボタンコントロール「Button1」を貼り付けます。
プロパティはデフォルトを使用します。
VB[Form1.vb]
Imports System.Drawing.Printing

Public Class Form1

    Private Const MAX_PAGE_COUNT As Integer = 5

    
' ページ番号
    Private _pageNumber As Integer = 0

    
Private Sub Button1_Click(ByVal sender As System.Object, _
        
ByVal e As System.EventArgs) Handles Button1.Click

        
Using doc As PrintDocument = New PrintDocument

            
' 用紙の向きを設定(横:True、縦:False)
            doc.DefaultPageSettings.Landscape = False

            ' プリンタがサポートしている用紙サイズを調べる
            For Each ps As PaperSize In doc.PrinterSettings.PaperSizes
                
' A4用紙に設定する
                If ps.Kind = PaperKind.A4 Then
                    doc.DefaultPageSettings.PaperSize = ps
                    
Exit For
                End If
            Next

            ' PrintPage イベントハンドル追加
            AddHandler doc.PrintPage, AddressOf doc_PrintPage

            
' ページ番号初期化
            _pageNumber = 1

            
' 印刷実行
            doc.Print()

        
End Using

    End Sub

    ' 印刷イベント処理
    Private Sub doc_PrintPage(ByVal sender As Object, _
        
ByVal e As System.Drawing.Printing.PrintPageEventArgs)

        
' 印刷範囲枠を描画
        e.Graphics.DrawRectangle(Pens.Black, e.MarginBounds)

        
' ページ数印刷
        e.Graphics.DrawString(String.Format("{0}ページ", _pageNumber), _
            
New Font("MSゴシック", 20, FontStyle.Bold, GraphicsUnit.Point), _
            Brushes.Black, e.MarginBounds.X, e.MarginBounds.Y)

        
If _pageNumber < MAX_PAGE_COUNT Then
            e.HasMorePages = True
        Else
            e.HasMorePages = False
        End If

        ' ページ番号加算
        _pageNumber = _pageNumber + 1
    
End Sub
End
 Class
C#[Form1.cs]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;

namespace Print_CS
{
    
public partial class Form1 : Form
    {
        private const int MAX_PAGE_COUNT = 5;

        
// ページ番号
        private int _pageNumber = 0;

        
public Form1()
        {
            InitializeComponent();
        }

        
private void Button1_Click(object sender, EventArgs e)
        {

            
using (PrintDocument doc = new PrintDocument())
            {

                
// 用紙の向きを設定(横:true、縦:false)
                doc.DefaultPageSettings.Landscape = false;

                
// プリンタがサポートしている用紙サイズを調べる
                foreach (PaperSize ps in doc.PrinterSettings.PaperSizes)
                {
                    
// A4用紙に設定する
                    if (ps.Kind == PaperKind.A4)
                    {
                        doc.DefaultPageSettings.PaperSize = ps;
                        
break;
                    }
                }

                
// PrintPage イベントハンドル追加
                doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);

                
// ページ番号初期化
                _pageNumber = 1;

                
// 印刷実行
                doc.Print();
            }
        }

        
// 印刷イベント処理
        void doc_PrintPage(object sender, PrintPageEventArgs e)
        {

            
// 印刷範囲枠を描画
            e.Graphics.DrawRectangle(Pens.Black, e.MarginBounds);

            
// ページ数印刷
            e.Graphics.DrawString(String.Format("{0}ページ", _pageNumber),
                
new Font("MS ゴシック", 20, FontStyle.Bold, GraphicsUnit.Point),
                
Brushes.Black, e.MarginBounds.X, e.MarginBounds.Y);

            
if( _pageNumber < MAX_PAGE_COUNT){
                e.HasMorePages = 
true;
            }
else{
                e.HasMorePages = false;
            }

            
// ページ番号加算
            _pageNumber++;
        }
    }
}
※このページで紹介しているサンプルコードについて管理者は動作保障をいたしません※
※サンプルコードを使用する場合は、自己責任でお願いします※

【楽天 ランキング:スマートフォン - アクセサリー】




このサイトはフリーソフトのMerge HTMLで作成されています。
このサイトはリンクフリーです。

ページの先頭に戻る Copyright© 2010-2015 Jun.Shiozaki All rights reserved.