C#ウィンドウアプリケーションでは、ドキュメントが複数ページになると印刷に問題が発生します。ドキュメントを印刷するために使用している次のコードを参照してください。小さなドキュメント、つまり1ページしかありません。
印刷ボタンのクリックイベント時
private void button1_Click(object sender, EventArgs e)
{
PrintDialog pd = new PrintDialog();
PrintDocument doc = new PrintDocument();
pd.Document = doc;
doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
DialogResult res = pd.ShowDialog();
if (res == System.Windows.Forms.DialogResult.OK)
{
doc.Print();
}
}
また、PrintPageEventHandler は次のとおりです。
void doc_PrintPage(object sender, PrintPageEventArgs e)
{
//Fetching data from DB
BillingApplicationEntities ent = new BillingApplicationEntities();
List<tbCustBill> BillData = ent.tbCustBills.Where(s => s.BillId == 20133).ToList();
//Printing doc
Graphics grp = e.Graphics;
Font fnt = new Font("Courier New", 12);
float fontH = fnt.GetHeight();
int startX = 10;
int StartY = 10;
int offset = 40;
foreach (tbCustWorkDet d in WorkData)
{
string Pare = d.WorkName.PadRight(30);
string pp = string.Format("{0:c}", d.Price).PadRight(30);
string pl = Pare + pp;
grp.DrawString(pl, fnt, new SolidBrush(Color.Black), startX, StartY + offset);
offset += (int)fontH + 5;
if (offsetY >= pageHeight)
{
e.HasMorePages = true;
offsetY = 0;
return; // you need to return, then it will go into this function again
}
else {
e.HasMorePages = false;
}
}
offset += 20;
// And cont with other data to print
}
このメソッドは正常に機能し、必要な o/p が得られますが、データが大きくなり、印刷するページがさらに必要になると、o/p では 1 ページしか得られません。
複数のページの場合、次のプロパティをtrueに設定する必要があると思います
e.HasMorePages = true;
しかし、私はこの値をどこにどのように配置するのかわかりません...
要するに、上記のコードから複数のドキュメントを印刷する方法を知りたいですか?
このコードreturn
では、関数に戻り、実行全体が再び開始され、これが無限ループになります。この問題を防ぐ方法を教えてください。