一点背景:我正在开发一个Windows窗体应用程序,其中包含一个用户打印一些信息的功能。
问题是,这些信息的大小可能会不时变化:有时可以放在一页上,有时可以是20多页。
PrintDocument
所以我用
e.HasMorePages
以处理可能的多个页面。下面是我的代码的简化版本:
int printIndex = 0;
private void startPrinting(){
PrintDocument printDoc = new PrintDocument();
printDoc.PrinterSettings.PrinterName = "Ticket printer1"
printDoc.PrintPage += new PrintPageEventHandler(printPage);
printDoc.Print();
}
以及
printPage
方法:
private void printPage(object sender, PrintPageEventArgs e)
{
Graphics graphics = e.Graphics;
int yPos = 0;
Font regular = new Font(FontFamily.GenericSansSerif, 10.0f, FontStyle.Regular);
for(int i = printIndex; i < data.Length; i++)
{
if (yPos + 30 >= e.PageBounds.Height)
{
e.HasMorePages = true;
return;
}
else
{
e.HasMorePages = false;
}
graphics.DrawString(data[i], regular, Brushes.Black, yPos, 110);
yPos += 20;
printIndex++;
}
regular.Dispose();
graphics.Dispose();
}
这在虚拟打印机甚至办公室里的一些物理打印机上都能正常工作。但当用户在自己的电脑上运行应用程序时(使用实际的打印机),它打印的页面不超过3页。
它是怎么工作的?如果是的话:我怎么能把它改成打印3页以上呢?