小票打印 80mm的纸张还有57mm的纸张 其中80mm的纸张 要求能发送进纸、退纸、切纸的命令 弄了有一段时间了` 切纸的命令怎么也实现不了`就是不能控制打印机什么时候切纸`每次切的时候都会切到字。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我之前做过的练习 分享一下using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Drawing.Printing;namespace WindowsApplication1{ public partial class Form1 : Form { string passWord = "1234"; string fullnumber = "9999"; System.Drawing.Printing.PrintDocument pdBays = new System.Drawing.Printing.PrintDocument(); public Form1() { InitializeComponent(); pdBays.PrintPage += new PrintPageEventHandler(pbay_PrintPage); pdBays.DefaultPageSettings.PaperSize = new PaperSize("",600, 800); } private void button1_Click(object sender, EventArgs e) { for (int i = 0; i <= 0; i++) { pdBays.Print(); } } public void pbay_PrintPage(object sender, PrintPageEventArgs ev) { Graphics dc = ev.Graphics; Pen pen = new Pen(Color.Black, 1); Font drawFont = new Font("仿宋_GB2312", 12); SolidBrush drawBrush = new SolidBrush(Color.Black); PointF drawPoint = new PointF(30, 200); //这句可以隐藏“正在打印”窗体 pdBays.PrintController = new System.Drawing.Printing.StandardPrintController(); dc.DrawString("\n密码:" + passWord + "\n充值券编号:" + fullnumber, drawFont, drawBrush, drawPoint); } ////网上例子 //private void btnPrint_Click(object sender, EventArgs e) //{ // //打印预览 // //PrintPreviewDialog ppd = new PrintPreviewDialog(); // PrintDocument pd = new PrintDocument(); // //设置边距 // Margins margin = new Margins(20, 20, 20, 20); // pd.DefaultPageSettings.Margins = margin; // ////纸张设置默认 // //PaperSize pageSize = new PaperSize("First custom size", 800, 600); // //pd.DefaultPageSettings.PaperSize = pageSize; // //打印事件设置 // pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage); // //ppd.Document = pd; // //ppd.ShowDialog(); // try // { // pd.Print(); // } // catch (Exception ex) // { // } //} }} 我之前写过 小票的打印,直接是写文本文件的方式,只不是写的对象是打印机的端口,希望对你的帮助: #region Print_CashResult public static void Print_CashResult(DataTable dt) { SafeFileHandle sfh = null; string instruction = null; IntPtr ptr = CreateFile(PrintPort, FileAccess.Write, FileShare.Write, 0, FileMode.Open, 0, IntPtr.Zero); if (ptr.ToInt32() == -1) { MessageBox.Show(string.Format("连接打印机:{0} 失败,请检查连接端口是否正确。", PrintPort )); return; } sfh = new SafeFileHandle(ptr, true); StreamWriter sw = new StreamWriter( new FileStream( sfh, FileAccess.Write), System.Text.Encoding.Default); StringBuilder sb = new StringBuilder(); DataRow dr = dt.Rows[0]; //一次充值只有1行 sb.AppendLine(string.Format("单据编号:{0}",dr["BillNo"])); sb.AppendLine(string.Format("{0,-15}{1,23}",ClubName + "(客户联)","充值")); sb.AppendLine("================================================"); sb.AppendLine(string.Format("{0,-19}{1,18}", "客户编号:" + CustNo, "客户名称:" + CustName)); sb.AppendLine("------------------------------------------------"); sb.AppendLine(string.Format("{0}{1}{2}{3}{4}", "单据编号 ", "充值时间 ", "账户余额 ", "充值金额 ", " 账户金额")); sb.AppendLine(string.Format("{0,-10}{1,-9:yy-MM-dd}{2,-9}{3,-9}{4,10}", dr["BillNo"], dr["ResultDate"], dr["RemainAccount"].ToString().Replace(".00", ""), dr["ResultMoney"].ToString().Replace(".00", ""), dr["Account"].ToString().Replace(".00", ""))); sb.AppendLine("------------------------------------------------"); sb.AppendLine(string.Format("打印日期:{0:yyyy-MM-dd HH:mm}------操作员:{1,5}",DateTime.Now,dr["Operator"])); sw.WriteLine(sb); //第1次 打客户联 instruction = Convert.ToChar(29) + instruction + Convert.ToChar(86) + instruction + Convert.ToChar(66) + instruction + Convert.ToChar(100); //切纸 sw.WriteLine(instruction); //切纸 sw.WriteLine(sb.Replace("(客户联)","(留底联)")); //第2次 打(留底联) sw.WriteLine(instruction); //切纸 sw.Close(); CloseHandle(ptr); } #endregion 是COM口打印的,总是的关键有两点 1、切纸(切纸命令)2、打印对齐时对不齐 我用的代表例似于(上面的那种):打印如果只有一行的话调整好了,但是如果是多行的话,商品名称汉字有的多有的少就调不齐了,想过补空格但是得计算有点费劲,请问有简单的办法没有?sb.AppendLine(string.Format("单据编号:{0}",dr["BillNo"])); sb.AppendLine(string.Format("{0,-15}{1,23}",ClubName + "(客户联)","充值")); sb.AppendLine("================================================"); sb.AppendLine(string.Format("{0,-19}{1,18}", "客户编号:" + CustNo, "客户名称:" + CustName)); sb.AppendLine("------------------------------------------------"); sb.AppendLine(string.Format("{0}{1}{2}{3}{4}", "单据编号 ", "充值时间 ", "账户余额 ", "充值金额 ", " 账户金额")); sb.AppendLine(string.Format("{0,-10}{1,-9:yy-MM-dd}{2,-9}{3,-9}{4,10}", dr["BillNo"], dr["ResultDate"], dr["RemainAccount"].ToString().Replace(".00", ""), dr["ResultMoney"].ToString().Replace(".00", ""), dr["Account"].ToString().Replace(".00", ""))); sb.AppendLine("------------------------------------------------"); sb.AppendLine(string.Format("打印日期:{0:yyyy-MM-dd HH:mm}------操作员:{1,5}",DateTime.Now,dr["Operator"]));3、打印的时候速度非常慢,打一行停一行 有点受不了啊 求 非均匀有理B样条曲线 nurbs的代码 AjaxControlToolkit的问题--与ajaxpro的区别 如何在代码中启动应用程序? Dataview对数据集进行过滤 C#实现网络通讯 DataGrid中的删除按钮 在线急等 两个DataTable合并列 如何读取本机ip地址(连上internet时的地址) 快过年了,想办法弄点钱! 现有1亿6000万左右个商业email地址出售,管理员大哥别删哟! 一个textbox的问题 求助。。。C#记事本查找功能
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;namespace WindowsApplication1
{
public partial class Form1 : Form
{
string passWord = "1234";
string fullnumber = "9999";
System.Drawing.Printing.PrintDocument pdBays = new System.Drawing.Printing.PrintDocument();
public Form1()
{
InitializeComponent();
pdBays.PrintPage += new PrintPageEventHandler(pbay_PrintPage);
pdBays.DefaultPageSettings.PaperSize = new PaperSize("",600, 800);
} private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i <= 0; i++)
{
pdBays.Print();
}
} public void pbay_PrintPage(object sender, PrintPageEventArgs ev)
{
Graphics dc = ev.Graphics; Pen pen = new Pen(Color.Black, 1);
Font drawFont = new Font("仿宋_GB2312", 12);
SolidBrush drawBrush = new SolidBrush(Color.Black);
PointF drawPoint = new PointF(30, 200); //这句可以隐藏“正在打印”窗体
pdBays.PrintController = new System.Drawing.Printing.StandardPrintController(); dc.DrawString("\n密码:" + passWord + "\n充值券编号:" + fullnumber, drawFont, drawBrush, drawPoint);
} ////网上例子
//private void btnPrint_Click(object sender, EventArgs e)
//{
// //打印预览
// //PrintPreviewDialog ppd = new PrintPreviewDialog();
// PrintDocument pd = new PrintDocument();
// //设置边距
// Margins margin = new Margins(20, 20, 20, 20);
// pd.DefaultPageSettings.Margins = margin;
// ////纸张设置默认
// //PaperSize pageSize = new PaperSize("First custom size", 800, 600);
// //pd.DefaultPageSettings.PaperSize = pageSize;
// //打印事件设置
// pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
// //ppd.Document = pd;
// //ppd.ShowDialog();
// try
// {
// pd.Print();
// }
// catch (Exception ex)
// {
// }
//}
}
}
直接是写文本文件的方式,只不是写的对象是打印机的端口,希望对你的帮助:
#region Print_CashResult
public static void Print_CashResult(DataTable dt)
{
SafeFileHandle sfh = null;
string instruction = null;
IntPtr ptr = CreateFile(PrintPort, FileAccess.Write, FileShare.Write, 0, FileMode.Open, 0, IntPtr.Zero);
if (ptr.ToInt32() == -1)
{
MessageBox.Show(string.Format("连接打印机:{0} 失败,请检查连接端口是否正确。", PrintPort ));
return;
} sfh = new SafeFileHandle(ptr, true);
StreamWriter sw = new StreamWriter( new FileStream( sfh, FileAccess.Write), System.Text.Encoding.Default); StringBuilder sb = new StringBuilder();
DataRow dr = dt.Rows[0]; //一次充值只有1行 sb.AppendLine(string.Format("单据编号:{0}",dr["BillNo"]));
sb.AppendLine(string.Format("{0,-15}{1,23}",ClubName + "(客户联)","充值"));
sb.AppendLine("================================================");
sb.AppendLine(string.Format("{0,-19}{1,18}", "客户编号:" + CustNo, "客户名称:" + CustName));
sb.AppendLine("------------------------------------------------");
sb.AppendLine(string.Format("{0}{1}{2}{3}{4}", "单据编号 ", "充值时间 ", "账户余额 ", "充值金额 ", " 账户金额")); sb.AppendLine(string.Format("{0,-10}{1,-9:yy-MM-dd}{2,-9}{3,-9}{4,10}", dr["BillNo"], dr["ResultDate"], dr["RemainAccount"].ToString().Replace(".00", ""), dr["ResultMoney"].ToString().Replace(".00", ""), dr["Account"].ToString().Replace(".00", ""))); sb.AppendLine("------------------------------------------------");
sb.AppendLine(string.Format("打印日期:{0:yyyy-MM-dd HH:mm}------操作员:{1,5}",DateTime.Now,dr["Operator"])); sw.WriteLine(sb); //第1次 打客户联
instruction = Convert.ToChar(29) + instruction + Convert.ToChar(86) + instruction + Convert.ToChar(66) + instruction + Convert.ToChar(100); //切纸
sw.WriteLine(instruction); //切纸 sw.WriteLine(sb.Replace("(客户联)","(留底联)")); //第2次 打(留底联)
sw.WriteLine(instruction); //切纸 sw.Close();
CloseHandle(ptr); }
#endregion
1、切纸(切纸命令)
2、打印对齐时对不齐 我用的代表例似于(上面的那种):打印如果只有一行的话调整好了,但是如果是多行的话,商品名称汉字有的多有的少就调不齐了,想过补空格
但是得计算有点费劲,请问有简单的办法没有?
sb.AppendLine(string.Format("单据编号:{0}",dr["BillNo"]));
sb.AppendLine(string.Format("{0,-15}{1,23}",ClubName + "(客户联)","充值"));
sb.AppendLine("================================================");
sb.AppendLine(string.Format("{0,-19}{1,18}", "客户编号:" + CustNo, "客户名称:" + CustName));
sb.AppendLine("------------------------------------------------");
sb.AppendLine(string.Format("{0}{1}{2}{3}{4}", "单据编号 ", "充值时间 ", "账户余额 ", "充值金额 ", " 账户金额")); sb.AppendLine(string.Format("{0,-10}{1,-9:yy-MM-dd}{2,-9}{3,-9}{4,10}", dr["BillNo"], dr["ResultDate"], dr["RemainAccount"].ToString().Replace(".00", ""), dr["ResultMoney"].ToString().Replace(".00", ""), dr["Account"].ToString().Replace(".00", ""))); sb.AppendLine("------------------------------------------------");
sb.AppendLine(string.Format("打印日期:{0:yyyy-MM-dd HH:mm}------操作员:{1,5}",DateTime.Now,dr["Operator"]));
3、打印的时候速度非常慢,打一行停一行 有点受不了啊