winform 打印尺寸 我现在用winform做了一个打印功能,默认一次是打A4纸大小,而我现在需要打A4纸的五分之一大小,PageSetupDialog1可以进行打印设置,里面没有A4纸的五分之一大小的尺寸,而且我是想默认就是五分之一,能不能直接在代码里面写死 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参考:自己修改看看调用pd_PrintPage方法://打印PrintDocument printDocument = new PrintDocument();printDocument.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);printDocument.Print ();pd_PrintPage方法://打印A4纸用的变量#region //打印A4纸用的变量 DataSet dsPrintInfo; //存放要打印的信息,资料从DB中获取,表一位SN信息,表二为WO信息 private int lineNo; //存放当前要打印行的行号private int lineQty; //存放总 共要打印的行数,可以是一个估算值,略大于实际行数private int printingPageNo = 0; //当前 打印的页号#endregionprivate void pd_PrintPage(object sender, PrintPageEventArgs e){ string strLine;//用于存放当前行打印的信息 float leftMargin = (e.MarginBounds.Left) * 3 / 4; //左边距 float topMargin = e.MarginBounds.Top * 2 / 3; //顶边距 float verticalPosition = topMargin; //初始化垂 直位置,设为顶边距 Font mainFont = new Font("Courier New", 10);//打印的字 体 //每页的行数,当打印行数超过这个时,要换页(1.05这个值是根据实际情况中设定的,可 以不要) int linesPerPage = (int)(e.MarginBounds.Height * 1.05 / mainFont.GetHeight (e.Graphics)); //Format of this DocReport#region //Format of this DocReport if (printingPageNo == 0) //打印第一页时,需要打印以下头信息 { mainFont = new Font("Courier New", 24, FontStyle.Bold); strLine = String.Format("{0,21}", "FQA Report"); e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat()); verticalPosition = verticalPosition + mainFont.GetHeight (e.Graphics); mainFont = new Font("Courier New", 16, FontStyle.Bold); strLine = "Pallet ID:" + dsPrintInfo.Tables[0].Rows [0]["Pallet_ID"].ToString(); e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat()); verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics); mainFont = new Font("3 of 9 Barcode", 24, FontStyle.Bold); strLine = "*" + dsPrintInfo.Tables[0].Rows[0]["Pallet_ID"].ToString() + "*"; e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin * 4, verticalPosition, new StringFormat()); verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics); mainFont = new Font ("Courier New", 16, FontStyle.Bold); strLine = "QCI_PN:" + dsPrintInfo.Tables[0].Rows[0]["PARTNUMBER"].ToString(); e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat()); verticalPosition = verticalPosition + mainFont.GetHeight (e.Graphics); strLine = "Date :" + DateTime.Now; e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat()); verticalPosition = verticalPosition + mainFont.GetHeight (e.Graphics); strLine = "Line :" + dsPrintInfo.Tables[0].Rows[0] ["Mfg_Line"].ToString(); e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat()); verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics); strLine = "Model:" + dsPrintInfo.Tables[0].Rows[0]["Model"].ToString(); e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat()); verticalPosition = verticalPosition + mainFont.GetHeight (e.Graphics) * 2; //linesPerPage:上面的头信息预计占的行数,因此第一页还能打印 (linesPerPage - 15)行 linesPerPage = linesPerPage - 15; //lineQty:lineQty行数大概是表行数加上15 lineQty = dsPrintInfo.Tables [0].Rows.Count + 15; } #endregion //打印具体的SN,BoxID,PalletID列 表#region //打印具体的SN,BoxID,PalletID列表 //打印标题头信息 mainFont = new Font("Courier New", 10); strLine = String.Format("{0,-10}", "NO#") + String.Format("{0,-25}", "System S/N") + String.Format("{0,-25}", "BOX_ID") + String.Format("{0,-25}", "Pallet_ID"); e.Graphics.DrawString (strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat()); verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics); //打印一 条横线 mainFont = new Font("Courier New", 3); e.Graphics.DrawLine(new Pen(Color.Black), leftMargin, verticalPosition, e.MarginBounds.Right, verticalPosition); verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics); //打印记录集信息 int count = 0; //当前页 的行数计数 mainFont = new Font("Courier New", 10); //如果(当前页 行计数器)小于(每页可以打印的行数)且(要打印行的行号)小于(总共要打印的行数) while (count < linesPerPage && lineNo < this.lineQty) { if (lineNo < dsPrintInfo.Tables[0].Rows.Count) //由于lineNo用于表中的下标值,因此需要加上该 判断 { string strLineTemp = String.Format("{0,-10}", dsPrintInfo.Tables[0].Rows[lineNo]["NO"].ToString()) + String.Format("{0,-25}", dsPrintInfo.Tables[0].Rows[lineNo] ["SN"].ToString()) + String.Format("{0,-25}", dsPrintInfo.Tables[0].Rows[lineNo]["BOX_ID"].ToString()) + String.Format("{0,-25}", dsPrintInfo.Tables[0].Rows[lineNo] ["Pallet_ID"].ToString()); e.Graphics.DrawString(strLineTemp, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat()); verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics); count++; //注意:这句要放到If中,否则,如果实际只有一页的话,尾信息会跑到第二页去 } lineNo++; } #endregion //如果总行数大于目前实 际行号,表明还有页要打,lineQty是估计数,因此实际用时要仔细估算 if (lineQty > lineNo) { e.HasMorePages = true; } else { e.HasMorePages = false; } //打印结尾信息#region //打印结尾 信息 if (!e.HasMorePages) { mainFont = new Font("Courier New", 10); e.Graphics.DrawLine(new Pen(Color.Black), leftMargin, verticalPosition, e.MarginBounds.Right, verticalPosition); verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics); foreach (DataRow dr in dsPrintInfo.Tables[1].Rows) { mainFont = new Font ("Courier New", 16); strLine = String.Format("{0,-3}", "WO:") + String.Format("{0,-16}",dr["WO"].ToString()) + String.Format("{0,-7}", "Qty:") + String.Format(" {0,-10}",dr["Qty"].ToString()); e.Graphics.DrawString (strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat()); verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics); } foreach (DataRow dr in dsPrintInfo.Tables[2].Rows) { mainFont = new Font("Courier New", 16); strLine = String.Format("{0,-9}", "TotalQty:") + String.Format("{0,-10} ", dr["TotalQty"].ToString()) + String.Format("{0, -7}", "BoxQty:") + String.Format("{0,-10}",dr ["BoxQty"].ToString()); e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat()); verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics); } } #endregion printingPageNo++; //页号加一} e.HasMorePages = false;是这个吗?这个是说还要不要继续再打的意思吧,打到A4纸的五分之一就不打了,谢谢支持 private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { Graphics gDraw = e.Graphics; Pen pen = new Pen(Color.Black, 1); //打印画笔 Font font = new Font("宋体", 12); //文本字体 Font fontNum = new Font("宋体", 14); Font fontTitle = new Font("宋体", 16, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); //单据标题字体 Rectangle rc = new Rectangle(); //在此矩形框内打印 StringFormat strFormat = new StringFormat(); strFormat.Alignment = StringAlignment.Center;//居中 Alignment:垂直面上 LineAlignment:水平面上。 rc.X = 270; //定义位置和大小 rc.Y = 5; rc.Width = 300; rc.Height = 50; gDraw.DrawString(“建材厂”, fontTitle, Brushes.Black, rc, strFormat); //画单据标题 内容略 } 直接把纸张设置大小就行了 printDocument.DefaultPageSettings.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0); printDocument.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("bq", 354, 236); c#查询时只取年月日 !时分秒省略! B/S 模式下实现即时消息通讯 求助 一个简单的问题! 怎样实现应用程序的重启动? 关于DataGrid控件? SetWindowsHookEx失败的问题 winform中的窗体显示问题~ 一个类中不能有两个对象索引? 寻找c#精彩教程(电子版) 各位能推荐个使用VS2008报表控件的教程吗? mediaplayer 不能给filename赋值
调用pd_PrintPage方法://打印
PrintDocument printDocument = new PrintDocument();
printDocument.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
printDocument.Print ();pd_PrintPage方法://打印A4纸用的变量#region //打印A4纸用的变量
DataSet dsPrintInfo; //存放要打印的信息,资料从DB中获取,表一位SN信息,表二为WO信息
private int lineNo; //存放当前要打印行的行号
private int lineQty; //存放总 共要打印的行数,可以是一个估算值,略大于实际行数
private int printingPageNo = 0; //当前 打印的页号
#endregion
private void pd_PrintPage(object sender, PrintPageEventArgs e)
{
string strLine;//用于存放当前行打印的信息
float leftMargin = (e.MarginBounds.Left) * 3 / 4; //左边距
float topMargin = e.MarginBounds.Top * 2 / 3; //顶边距
float verticalPosition = topMargin; //初始化垂 直位置,设为顶边距
Font mainFont = new Font("Courier New", 10);//打印的字 体
//每页的行数,当打印行数超过这个时,要换页(1.05这个值是根据实际情况中设定的,可 以不要)
int linesPerPage = (int)(e.MarginBounds.Height * 1.05 / mainFont.GetHeight (e.Graphics));
//Format of this DocReport#region //Format of this DocReport
if (printingPageNo == 0) //打印第一页时,需要打印以下头信息
{
mainFont = new Font("Courier New", 24, FontStyle.Bold);
strLine = String.Format("{0,21}", "FQA Report");
e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat());
verticalPosition = verticalPosition + mainFont.GetHeight (e.Graphics);
mainFont = new Font("Courier New", 16, FontStyle.Bold);
strLine = "Pallet ID:" + dsPrintInfo.Tables[0].Rows [0]["Pallet_ID"].ToString();
e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat());
verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics);
mainFont = new Font("3 of 9 Barcode", 24, FontStyle.Bold);
strLine = "*" + dsPrintInfo.Tables[0].Rows[0]["Pallet_ID"].ToString() + "*";
e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin * 4, verticalPosition, new StringFormat());
verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics);
mainFont = new Font ("Courier New", 16, FontStyle.Bold);
strLine = "QCI_PN:" + dsPrintInfo.Tables[0].Rows[0]["PARTNUMBER"].ToString();
e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat());
verticalPosition = verticalPosition + mainFont.GetHeight (e.Graphics);
strLine = "Date :" + DateTime.Now;
e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat());
verticalPosition = verticalPosition + mainFont.GetHeight (e.Graphics);
strLine = "Line :" + dsPrintInfo.Tables[0].Rows[0] ["Mfg_Line"].ToString();
e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat());
verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics);
strLine = "Model:" + dsPrintInfo.Tables[0].Rows[0]["Model"].ToString();
e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat());
verticalPosition = verticalPosition + mainFont.GetHeight (e.Graphics) * 2;
//linesPerPage:上面的头信息预计占的行数,因此第一页还能打印 (linesPerPage - 15)行
linesPerPage = linesPerPage - 15;
//lineQty:lineQty行数大概是表行数加上15
lineQty = dsPrintInfo.Tables [0].Rows.Count + 15;
}
#endregion
//打印具体的SN,BoxID,PalletID列 表#region //打印具体的SN,BoxID,PalletID列表
//打印标题头信息
mainFont = new Font("Courier New", 10);
strLine = String.Format("{0,-10}", "NO#") +
String.Format("{0,-25}", "System S/N") +
String.Format("{0,-25}", "BOX_ID") +
String.Format("{0,-25}", "Pallet_ID");
e.Graphics.DrawString (strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat());
verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics);
//打印一 条横线
mainFont = new Font("Courier New", 3);
e.Graphics.DrawLine(new Pen(Color.Black), leftMargin, verticalPosition, e.MarginBounds.Right, verticalPosition);
verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics);
//打印记录集信息
int count = 0; //当前页 的行数计数
mainFont = new Font("Courier New", 10);
//如果(当前页 行计数器)小于(每页可以打印的行数)且(要打印行的行号)小于(总共要打印的行数)
while (count < linesPerPage && lineNo < this.lineQty)
{
if (lineNo < dsPrintInfo.Tables[0].Rows.Count) //由于lineNo用于表中的下标值,因此需要加上该 判断
{
string strLineTemp = String.Format("{0,-10}", dsPrintInfo.Tables[0].Rows[lineNo]["NO"].ToString()) +
String.Format("{0,-25}", dsPrintInfo.Tables[0].Rows[lineNo] ["SN"].ToString()) +
String.Format("{0,-25}", dsPrintInfo.Tables[0].Rows[lineNo]["BOX_ID"].ToString()) +
String.Format("{0,-25}", dsPrintInfo.Tables[0].Rows[lineNo] ["Pallet_ID"].ToString());
e.Graphics.DrawString(strLineTemp, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat());
verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics);
count++; //注意:这句要放到If中,否则,如果实际只有一页的话,尾信息会跑到第二页去
}
lineNo++;
}
#endregion
//如果总行数大于目前实 际行号,表明还有页要打,lineQty是估计数,因此实际用时要仔细估算
if (lineQty > lineNo)
{
e.HasMorePages = true;
}
else
{
e.HasMorePages = false;
}
//打印结尾信息#region //打印结尾 信息
if (!e.HasMorePages)
{
mainFont = new Font("Courier New", 10);
e.Graphics.DrawLine(new Pen(Color.Black), leftMargin, verticalPosition, e.MarginBounds.Right, verticalPosition);
verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics);
foreach (DataRow dr in dsPrintInfo.Tables[1].Rows)
{
mainFont = new Font ("Courier New", 16);
strLine = String.Format("{0,-3}", "WO:") + String.Format("{0,-16}",dr["WO"].ToString())
+ String.Format("{0,-7}", "Qty:") + String.Format(" {0,-10}",dr["Qty"].ToString());
e.Graphics.DrawString (strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat());
verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics);
}
foreach (DataRow dr in dsPrintInfo.Tables[2].Rows)
{
mainFont = new Font("Courier New", 16);
strLine = String.Format("{0,-9}", "TotalQty:") + String.Format("{0,-10} ", dr["TotalQty"].ToString())
+ String.Format("{0, -7}", "BoxQty:") + String.Format("{0,-10}",dr ["BoxQty"].ToString());
e.Graphics.DrawString(strLine, mainFont, Brushes.Black, leftMargin, verticalPosition, new StringFormat());
verticalPosition = verticalPosition + mainFont.GetHeight(e.Graphics);
}
}
#endregion
printingPageNo++; //页号加一
}
是这个吗?这个是说还要不要继续再打的意思吧,打到A4纸的五分之一就不打了,
谢谢支持
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Graphics gDraw = e.Graphics;
Pen pen = new Pen(Color.Black, 1); //打印画笔
Font font = new Font("宋体", 12); //文本字体
Font fontNum = new Font("宋体", 14);
Font fontTitle = new Font("宋体", 16,
System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); //单据标题字体 Rectangle rc = new Rectangle(); //在此矩形框内打印
StringFormat strFormat = new StringFormat();
strFormat.Alignment = StringAlignment.Center;//居中 Alignment:垂直面上 LineAlignment:水平面上。 rc.X = 270; //定义位置和大小
rc.Y = 5;
rc.Width = 300;
rc.Height = 50; gDraw.DrawString(“建材厂”, fontTitle, Brushes.Black, rc, strFormat); //画单据标题
内容略
}
printDocument.DefaultPageSettings.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
printDocument.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("bq", 354, 236);