アクセス数 累計:000,124,973 昨日:000,000,064 本日:000,000,094
|
|
|
|
【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. |
|
|
|