我创建标签一个WinForm。C#WinForm的PrintPreviewDialog上:打印预览显示多个标签每页
它调用在使用PrintPageEventArgs
一个PrintPreviewDialog
并显示信息的PrintDocument
的PrintPageEventHandler
。
void Document_Printed(object sender, PrintPageEventArgs e) {
// Code goes here
}
如果标签是一个小的地址标签去,而不是在PrintPreviewDialog
看到一个标签到8.5x11信,我想看到适合对PageSettings.PaperSize
标签的数量。
示例:假设四(4)项适合选定的媒体(艾利打印机标签或任何东西)上。
如果我的最终用户指定了1到4份要打印的副本,我希望我的“打印预览”对话框显示所有副本。
如果我的最终用户指定超过四(4)项,打印预览对话框应该显示多个页面(我以前从来没有解决多页)。
我大小我的数据,以满足我的标签尺寸,但我不知道如何让我的PrintPageEventHandler
对PrintPreviewDialog
显示超过1个标签。
有人能告诉我如何做到这一点?如何显示和打印每张纸上的多个标签(文档?)?
编辑:这里是我的代码,这是基于2个的RectangleF对象:pageRect和LabelRect:
void Document_Printed(object sender, PrintPageEventArgs e) {
if (printPreview == null) return;
int labelSupport = 1;
RectangleF pageRect = new RectangleF(0, 0, printPreview.Document.DefaultPageSettings.PaperSize.Width, printPreview.Document.DefaultPageSettings.PaperSize.Height);
float fW = (pageRect.Width < LabelRect.Width) ? (pageRect.Width/LabelRect.Width) : (LabelRect.Width/pageRect.Width);
float fH = (pageRect.Height < LabelRect.Height) ? (pageRect.Height/LabelRect.Height) : (LabelRect.Height/pageRect.Height);
// START Portion I need HELP with!
if (1 < LabelsPerPage) {
if (Landscape) {
} else {
}
} else {
if (Landscape) {
} else {
}
}
// END (I think) Portion I need HELP with!
SizeF ratio = new SizeF(fW, fH);
Graphics G = e.Graphics;
foreach (Label item in labelList) {
Console.WriteLine(item.Name);
using (SolidBrush b = new SolidBrush(Color.Black)) {
using (Pen p = new Pen(b)) {
float x = ratio.Width * (float)item.Location.X;
float y = ratio.Height * (float)item.Location.Y;
float w = ratio.Width * (float)item.Size.Width;
float h = ratio.Height * (float)item.Size.Height;
RectangleF r = new RectangleF(x, y, w, h);
G.DrawString(item.Text, item.Font, b, r);
}
}
}
}
编辑2:我需要一种方法来打印1页上的2页或更多的文档。到目前为止还没有任何东西能够解决这个关键问题这是我需要的答案。
了解PrintPageEventHandler – 2011-04-27 20:41:16
的一些渲染代码可能会很有用。已经添加了一个代码示例,从** EDIT:**部分开始。 – jp2code 2011-04-27 20:48:52
这看起来没问题。我会在该方法的顶部放置一个断点,然后逐行放置,以确保您期望发生的事情实际上正在发生。例如,您的绘图循环中的每个项目的大小和位置值是否更改?看起来他们应该但是如果你没有在别处正确地分配这些值,那么你可能再次绘制相同的东西,或者在前面的标签上绘制每个新的标签。 – 2011-04-27 21:01:44