gpt4 book ai didi

c# - PrintDocument 是将整个文档发送到打印机还是逐行发送?

转载 作者:太空宇宙 更新时间:2023-11-03 12:11:40 35 4
gpt4 key购买 nike

一些上下文:我正在开发一个 Windows 窗体应用程序,其中包含用户打印一些信息的功能。

问题是该信息的大小会不时发生变化:有时它可以放在一个页面上,有时它可以超过 20 页。

对于打印,我使用的是 .Net 的 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 页。

我问了一个同行,他建议 Windows 正在将整个文档发送到打印机,并且可能由于内存不足问题,某些打印机无法处理大型文档。

它是如何工作的?如果是:如何修复它以打印超过 3 页?

最佳答案

一些提示:

您正在使用的所有那些绘图类(图形、字体等)都是 Win32 GDI 对象的包装器并且是一次性的。如果您不处置这些东西,意想不到的结果可能会发生。阅读“using”语句和 IDisposable,确保正确清理。您不是逐行打印;您正在逐页打印(因此 PrintPage 事件)。您应该能够打印很多页。

关于c# - PrintDocument 是将整个文档发送到打印机还是逐行发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51976182/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com