【发布时间】:2011-07-21 14:27:00
【问题描述】:
我有 3 种打印方法:printa、printb 和 printc(每种打印一个表格)。所有 3 个表格都需要跨多个页面打印。如何打印 3 页?
我知道我们需要使用事件处理程序并使用 currentpage 和 e.hasmorepages 但我不知道如何使用它。
【问题讨论】:
我有 3 种打印方法:printa、printb 和 printc(每种打印一个表格)。所有 3 个表格都需要跨多个页面打印。如何打印 3 页?
我知道我们需要使用事件处理程序并使用 currentpage 和 e.hasmorepages 但我不知道如何使用它。
【问题讨论】:
只需跟踪页码。您在 BeginPrint 事件中将其设置为 0,并在每次调用 PrintPage 时将其递增。像这样:
int pageNumber;
private void printDocument1_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
pageNumber = 0;
}
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) {
++pageNumber;
e.HasMorePages = true;
switch (pageNumber) {
case 1: printa(e); break;
case 2: printb(e); break;
case 3: printc(e); e.HasMorePages = false; break;
}
}
【讨论】:
是的,它可能非常晦涩。以下是我为 printing Reporting Services 报告(下面代码中的 MetaFile 图像数组)所做的。
public void Print()
{
if (emfImage == null || emfImage.Count <= 0)
{
throw new ArgumentException("An image is required to print.");
}
printer = printer.Trim();
if (string.IsNullOrEmpty(printer))
{
throw new ArgumentException("A printer is required.");
}
printingPage = 0;
PrintDocument pd = new PrintDocument();
pd.PrinterSettings.PrinterName = printer;
pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
pd.Print();
}
private void pd_PrintPage(object sender, PrintPageEventArgs e)
{
Metafile page = emfImage[printingPage];
e.Graphics.DrawImage(page, 0, 0, page.Width, page.Height);
e.HasMorePages = ++printingPage < emfImage.Count;
}
【讨论】: