我有一个用于创建标签的WinForm。
它会调用PrintPreviewDialog
并使用PrintPageEventArgs
的{{1}}中的PrintDocument
显示信息。
PrintPageEventHandler
如果Label是一个转到8.5x11 Letter的小地址标签,而不是void Document_Printed(object sender, PrintPageEventArgs e) {
// Code goes here
}
中看到一个标签,我想查看适合PrintPreviewDialog
的标签数量。
示例:假设四(4)个项目适合所选媒体(Avery Printer Label或其他任何内容)。
如果我的最终用户指定要打印的1到4份副本,我希望我的“打印预览”对话框显示所有副本。
如果我的最终用户指定的项目超过四(4)项,则“打印预览”对话框应显示多个页面(之前我从未处理过多个页面)。
我可以调整数据大小以适应我的标签大小,但我不知道如何让PageSettings.PaperSize
在PrintPageEventHandler
上显示多个标签。
有人能告诉我这是怎么做到的吗?如何在每张纸上显示和打印多个标签(文档?)?
编辑:这是我的代码,它基于2个RectangleF对象:pageRect和LabelRect:
PrintPreviewDialog
编辑2:我需要一种方法在1页上打印2个或更多文档。到目前为止,还没有解决这个关键问题。这就是我需要的答案。
答案 0 :(得分:1)
首先打印页面实际上很容易:只需将PrintPageEventArgs HasMorePages property设置为true即可。
棘手的部分是通过将HasMorePages
设置为false来知道何时停止此操作。我通过将每个打印作业的数据存储在List中并使用索引值来跟踪我在此列表中的位置来完成此操作。
每次PrintPage事件触发时,我都会增加我在List中使用的索引,以便为PrintPage事件提供我要打印的页面的详细信息,如果我在最后一个元素上,则将HasMorePages设置为false。 / p>
void Document_Printed(object sender, PrintPageEventArgs e) {
// Get data for this page.
//xxx = pageDataList[indexValue];
// Code to print stuff.
indexValue++;
e.HasMorePages = (pageDataList.Length == indexValue);
}
这种方法也适用于您,也许使用我在代码中看到的labelList。既然你要分四批打印,你显然必须稍微调整逻辑,但我认为你明白了。