C#WinForm PrintPreviewDialog:打印预览以显示每页多个标签

时间:2011-04-27 20:35:06

标签: c# winforms print-preview

我有一个用于创建标签的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.PaperSizePrintPageEventHandler上显示多个标签。

有人能告诉我这是怎么做到的吗?如何在每张纸上显示和打印多个标签(文档?)?

编辑:这是我的代码,它基于2个RectangleF对象:pageRect和LabelRect:

PrintPreviewDialog

编辑2:我需要一种方法在1页上打印2个或更多文档。到目前为止,还没有解决这个关键问题。这就是我需要的答案。

1 个答案:

答案 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。既然你要分四批打印,你显然必须稍微调整逻辑,但我认为你明白了。