分類:[ASP.NET (C#)]
2010/08/23(Mon) 12:10:49 編集(投稿者)
いつもお世話になっています。
複数ページの印刷ドキュメントを、プレビューを表示してから印刷したいと考えています。
しかし、プレビュー画面では、「1ページと2ページ」、「3ページと4ページ」、「5ページと6ページ」・・・
というように、2ページ分が重なってしまいます。
この現象は、プレビューを用いなければ発生せず、正常に印刷することができました。
以下がソースになります。
動きとしては、新規プロジェクトからフォーム上にボタンを1つ置いて、ボタンを押すとプレビューを表示します。
ボタンを押すとプレビューを表示して10ページ作成し、各ページに「文字列0」「文字列1」と表示させるつもりで作成しました。
まずプレビューを用いない正常なソースです。
【プレビュー無し正常ソース】
public partial class Form1 : Form
{
int i;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
printDocument1.Print();
}
private void printDocument1_PrintPage
(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawString("文字列"+i
, new Font("MS Pゴシック", 20.0F), Brushes.Red, new Point(100, 100));
if (i < 10)
{
e.HasMorePages = true;
}
else
{
e.HasMorePages = false;
}
i++;
}
そして、プレビューがあって文字が重なるエラーが出るソースです。
【プレビュー有りエラーソース】
public partial class Form1 : Form
{
int i;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
printDocument1.PrintPage
+= new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage);
printPreviewDialog1.Document = printDocument1;
printPreviewDialog1.ShowDialog();
}
private void printDocument1_PrintPage
(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawString("文字列"+i
, new Font("MS Pゴシック", 20.0F), Brushes.Red, new Point(100, 100));
if (i < 10)
{
e.HasMorePages = true;
}
else
{
e.HasMorePages = false;
}
i++;
}
}
プレビュー画面からの印刷結果は違います(変数iをリセットしていない為)。
このエラープログラムを実行してみると、計6ページ作成され、各ページに「文字列0」と「文字列1」が重なったもの、
「文字列2」と「文字列3」が重なったもの・・・(中略)「文字列10」と「文字列11」が重なったものが作成されました。
『printDocument1_PrintPage』メソッドは11回呼び出されました。
試しに、
if (i < 10)
{
e.HasMorePages = true;
}
の部分の true を false に変更し、1ページのみ出力しようとすると、
計1ページ作成され、「文字列0」と「文字列1」が重なったものが作成されました。
『printDocument1_PrintPage』メソッドは2回呼び出されました。
どこかプログラムに不備があると思うのですが、わかりません。ご教授をお願いします。
参考サイトは以下を利用しました。
http://www.atmarkit.co.jp/fdotnet/dotnettips/397printmoredoc/printmoredoc.html (@IT の印刷方法)
http://www.atmarkit.co.jp/fdotnet/dotnettips/625printpreviewdlg/printpreviewdlg.html (@IT の印刷プレビュー)
よろしくお願いします。</pre></pre>