gpt4 book ai didi

c# - 使用 PrintDocument 打印多页

转载 作者:行者123 更新时间:2023-11-30 14:15:21 25 4
gpt4 key购买 nike

我正在尝试打印发票。发票应该能够打印在多页上,但这就是问题所在。我可以在单页上完美地打印发票,但是一旦发票不适合单页打印,打印作业就会退出第一页。

这是我正在使用的代码。 'artikelen'是一个文章列表(List)。我读过几个类似的例子,我很确定我在这里遗漏了一些东西。

(已编辑:删除了一些不必要的代码)

public void PrintA4Factuur()
{
p = new PrintDocument();
p.PrintPage +=
new PrintPageEventHandler(printPage);
printPreviewDialog.Document = p;
printPreviewDialog.ShowDialog();
}

void printPage(object sender1, PrintPageEventArgs e1)
{
Graphics g = e1.Graphics;
int yPos = 320;
float pageHeight = e1.MarginBounds.Height;
int artikelPosition = 0;
while (yPos + 100 < pageHeight
&& artikelPosition < this.artikelen.Count)
{
// Do stuff with articles (printing details in different rectangles

artikelPosition += 1;
yPos += 20;
}

if (artikelPosition < this.artikelen.Count)
{
e1.HasMorePages = true;
return;
}
else
{
e1.HasMorePages = false;
}
}

最佳答案

好吧,Lars 指出了在每个页面的开头将 artikelPosition 重置为零的问题,但是此代码还有一些其他问题。

您应该始终使用 e1.MarginBounds对于坐标,因为边距可以由用户更改,p.DefaultPageSettings 将不包括它。

使用像 GetHeight(yourDeviceGraphPort) 这样的字体指标,不要硬编码行高。

始终使用 float 作为坐标,不要在 int 之间转换。

字体是非托管资源,使用完后必须Dispose。循环重复创建和处理字体是低效的;在调用 PrintDocument.Print() 之前构造它,并在打印完所有页面后处理它。

System.Drawing 中还定义了一个 Black SolidBrush。

关于c# - 使用 PrintDocument 打印多页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10231860/

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