请帮忙解决下.
谢谢,如图:打印效果图:
8 个解决方案
#1
public bool Print()
{
bool bolIsSuccess = false;
PrintDocument pd = new PrintDocument();
PaperSize ps = new PaperSize("Measure", 350, 650);
pd.DefaultPageSettings.PaperSize = ps;
pd.DefaultPageSettings.PrinterSettings.Copies = 1;
pd.DefaultPageSettings.PrinterSettings.MaximumPage = 1;
pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
pd.Print();
bolIsSuccess = true;
return bolIsSuccess;
}
void pd_PrintPage(object sender, PrintPageEventArgs e)
{
Font titleFont = new Font("宋体", 14, FontStyle.Bold);//标题字体
Font fntTxt = new Font("宋体", 12, FontStyle.Regular);//正文文字
Brush brush = new SolidBrush(Color.Black);//画刷
Pen pen = new Pen(Color.Black); //线条颜色
Point poTitle = new Point(40, 200);
Point poTime = new Point(70, 210);
Point poTxt = new Point(20, 235);
StringBuilder sb = GetPrintSW();
string strTime = DateTime.Now.Year.ToString() + "年" + DateTime.Now.Month.ToString() + "月" + DateTime.Now.Day.ToString() + "日 " + DateTime.Now.ToString("HH:mm:ss");
try
{
e.Graphics.DrawString("\r\n\r\n\r\n\r\n\r\n\r\nXXXXXXX计量单", fntTxt, new SolidBrush(Color.White), new Point(45,100));
e.Graphics.DrawString("\r\n\r\n\r\n\r\n\r\n\r\nXXXXXXXX计量单", fntTxt, brush, poTitle);
e.Graphics.DrawString("\r\n\r\n\r\n\r\n\r\n\r\n\r\n"+strTime, fntTxt, brush, poTime);
e.Graphics.DrawString(sb.ToString(), fntTxt, brush, poTxt); //DrawString方式进行打印。
if (dt.Rows.Count > 0)
{
string strMeaDocId = dt.Rows[0]["C_MeasureDocID"].ToString() ?? "";
if (!string.IsNullOrEmpty(strMeaDocId))
{
barcodeControl.Data = strMeaDocId;
}
}
barcodeControl.CopyRight = "";
BarcodeType bt = BarcodeType.CODE39;
barcodeControl.BarcodeType = bt;
Graphics g = e.Graphics;
Rectangle rect = barcodeControl.ClientRectangle;
rect = new Rectangle(90, 550, 230, 50);
//打印
barcodeControl.Draw(g, rect, GraphicsUnit.Inch, 0.01f, 0, null);
g.Dispose();
}
catch (Exception ex)
{
SaveLog.SaveErrLog("打印小票出错:"+ex.Message);
return;
}
}
#2
这个是一行一行自动换行文本,是否可以首先定义打印模板每行字体大小,颜色,然后把数据传入打印模板中,然后再打印,可以指定打印机打印。
#3
可以啊,用DevExpress的报表可视化设计工具就可以了。
#4
尽量不用第三方控件,比如水晶报表,Dev等第三方控件. 用微软PrintDocument自带打印。
谢谢
谢谢
#5
不用第三方,那你自己画呗,把他画成一张图片就可以了
#6
嗯,怎么去画,假设我打印信息有30行,那要画30次,这样是不是很繁琐了,有没有批量画文本,然后生成一张图片打印。
#7
批量生成文本的方法是你自己写的
从数据库获取到数据后,将要打印的数据放到一个StringBuilder中,最后统一生成打印用的字符串
将这个字符串作为参数生成图片
从数据库获取到数据后,将要打印的数据放到一个StringBuilder中,最后统一生成打印用的字符串
将这个字符串作为参数生成图片
#8
你不会用 \r\n 换行么?。。。
#1
public bool Print()
{
bool bolIsSuccess = false;
PrintDocument pd = new PrintDocument();
PaperSize ps = new PaperSize("Measure", 350, 650);
pd.DefaultPageSettings.PaperSize = ps;
pd.DefaultPageSettings.PrinterSettings.Copies = 1;
pd.DefaultPageSettings.PrinterSettings.MaximumPage = 1;
pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
pd.Print();
bolIsSuccess = true;
return bolIsSuccess;
}
void pd_PrintPage(object sender, PrintPageEventArgs e)
{
Font titleFont = new Font("宋体", 14, FontStyle.Bold);//标题字体
Font fntTxt = new Font("宋体", 12, FontStyle.Regular);//正文文字
Brush brush = new SolidBrush(Color.Black);//画刷
Pen pen = new Pen(Color.Black); //线条颜色
Point poTitle = new Point(40, 200);
Point poTime = new Point(70, 210);
Point poTxt = new Point(20, 235);
StringBuilder sb = GetPrintSW();
string strTime = DateTime.Now.Year.ToString() + "年" + DateTime.Now.Month.ToString() + "月" + DateTime.Now.Day.ToString() + "日 " + DateTime.Now.ToString("HH:mm:ss");
try
{
e.Graphics.DrawString("\r\n\r\n\r\n\r\n\r\n\r\nXXXXXXX计量单", fntTxt, new SolidBrush(Color.White), new Point(45,100));
e.Graphics.DrawString("\r\n\r\n\r\n\r\n\r\n\r\nXXXXXXXX计量单", fntTxt, brush, poTitle);
e.Graphics.DrawString("\r\n\r\n\r\n\r\n\r\n\r\n\r\n"+strTime, fntTxt, brush, poTime);
e.Graphics.DrawString(sb.ToString(), fntTxt, brush, poTxt); //DrawString方式进行打印。
if (dt.Rows.Count > 0)
{
string strMeaDocId = dt.Rows[0]["C_MeasureDocID"].ToString() ?? "";
if (!string.IsNullOrEmpty(strMeaDocId))
{
barcodeControl.Data = strMeaDocId;
}
}
barcodeControl.CopyRight = "";
BarcodeType bt = BarcodeType.CODE39;
barcodeControl.BarcodeType = bt;
Graphics g = e.Graphics;
Rectangle rect = barcodeControl.ClientRectangle;
rect = new Rectangle(90, 550, 230, 50);
//打印
barcodeControl.Draw(g, rect, GraphicsUnit.Inch, 0.01f, 0, null);
g.Dispose();
}
catch (Exception ex)
{
SaveLog.SaveErrLog("打印小票出错:"+ex.Message);
return;
}
}
#2
这个是一行一行自动换行文本,是否可以首先定义打印模板每行字体大小,颜色,然后把数据传入打印模板中,然后再打印,可以指定打印机打印。
#3
可以啊,用DevExpress的报表可视化设计工具就可以了。
#4
尽量不用第三方控件,比如水晶报表,Dev等第三方控件. 用微软PrintDocument自带打印。
谢谢
谢谢
#5
不用第三方,那你自己画呗,把他画成一张图片就可以了
#6
嗯,怎么去画,假设我打印信息有30行,那要画30次,这样是不是很繁琐了,有没有批量画文本,然后生成一张图片打印。
#7
批量生成文本的方法是你自己写的
从数据库获取到数据后,将要打印的数据放到一个StringBuilder中,最后统一生成打印用的字符串
将这个字符串作为参数生成图片
从数据库获取到数据后,将要打印的数据放到一个StringBuilder中,最后统一生成打印用的字符串
将这个字符串作为参数生成图片
#8
你不会用 \r\n 换行么?。。。