在c#窗口应用程序中打印多个文档
在c#window应用程序中,当文档超过1页时,我在打印文档时遇到问题。请参阅下面的代码,我正在使用该代码打印文档及其工作细节,而其中有一个小文档,即只有一页 在打印按钮的单击事件上在c#窗口应用程序中打印多个文档,c#,winforms,printing,system.drawing,C#,Winforms,Printing,System.drawing,在c#window应用程序中,当文档超过1页时,我在打印文档时遇到问题。请参阅下面的代码,我正在使用该代码打印文档及其工作细节,而其中有一个小文档,即只有一页 在打印按钮的单击事件上 private void button1_Click(object sender, EventArgs e) { PrintDialog pd = new PrintDialog(); PrintDocument doc = new PrintDocument();
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
}
但我不知道在哪里,如何把这个值
简言之,我想知道如何从上述代码打印多个文档
在这段代码中,return将返回函数并重新开始整个执行过程,依此类推,这将成为无限循环。请告诉我如何预防此问题。Add
e.HasMorePages=true如果有更多页面要打印,则在printpage处理程序中选择code>。这将导致再次调用处理程序。由处理程序输出正确的页面。检查此SO帖子:[如何从WinForms打印多个页面?][1][1]:试试看。。。。可能有效….>在打印页面事件结束时--->添加e.HasMorePages=m_currentPageOnPrint<(m_printToPage);将打印和打印页面上的当前页面设置为int pagenumbers您正在增加变量offset
,但正在测试变量offsetY
。总是声明变量是个好主意。您可以通过将工具、选项、项目和解决方案、VB默认值、Option Explicit设置为“on”来确保这一点。
e.HasMorePages = true;