客户那边突然提出这样的需求,本来系统准备用B/S架构开发,打算使用DIV绝对位置定位坐标,然后用WEB浏览器打印不知道能不能实现,纸张不是A4大小,如果不行这个模块打算改用WinForm也可以,但不知道WinForm怎么控制打印,有没有逐行打印的功能,但逐行打印又如何换页呢?(是不是多打几个换行,这样会不会打印张数多了套打就对不齐了)
有哪位大哥以前做过类似的,把大概方法和思路告诉小弟,不慎感谢
有哪位大哥以前做过类似的,把大概方法和思路告诉小弟,不慎感谢
可以通过这个属性自动换页的!
/// <summary>
/// 打印设置对话框。
/// </summary>
public void Print()
{
PrintDocument p = new PrintDocument();
p.PrintPage += new PrintPageEventHandler(this.PrintPageEventHandler);
p.Print();
//PrintPreviewDialog prev = new PrintPreviewDialog();
//prev.Document = p;
//prev.ShowDialog();
}
private void PrintPageEventHandler(object obj, System.Drawing.Printing.PrintPageEventArgs ev)
{
Graphics g = ev.Graphics;
//g.DrawRectangle(Pens.Black, ev.PageSettings.PrintableArea.X, ev.PageSettings.PrintableArea.Y, ev.PageSettings.PrintableArea.Width, ev.PageSettings.PrintableArea.Height);
float X = 10, Y = yoffset+toffset;
bool bMorePage = true ;
//统计第3,5,7个label
// int nLabelCount = 1;
for (int i = 1; i <= 6; i++)
{
if ((6 * (nCurrentPage - 1) + i) > nBoxCount)
{
bMorePage = false;
break;
}
X = 0;
if (i > 1)
{
if (i % 2 == 0)
{
X += ev.PageSettings.PrintableArea.Width / 2+loffset;
}
else
{
Y += 1058.4F / 3+yoffset;//* nLabelCount ;
//nLabelCount++;
}
}
g.TranslateTransform(X + xoffset, Y); Vimage.DrawImage(g, 6 * (nCurrentPage - 1) + i, nPages, nCurrentPage);
g.ResetTransform(); if ((6 * (nCurrentPage - 1) + i) >= nBoxCount)
{
bMorePage = false;
break;
}
}
//ev.Graphics.DrawRectangle(Pens.Black, 0, 0, ev.PageSettings.PrintableArea.Height - 2, ev.PageSettings.PrintableArea.Width - 2); //ev.PageBounds.X, ev.PageBounds.Y, ev.PageBounds.Width - 4, ev.PageBounds.Height -4);
//Vimage.PrintToPrinter(ev.Graphics); if (bMorePage)
{
ev.HasMorePages = true; nCurrentPage++;
}
else
{
ev.HasMorePages = false;
nCurrentPage = 1;
} }
}