c# 小票机打印二维条码_C#小票打印机
使用的佳博GP-5890XIII
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Printing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JBPrinter
{
public partial class Form1 : Form
{
private IntPtr Gp_IntPtr; //驅動打印句柄
private libUsbContorl.UsbOperation NewUsb = new libUsbContorl.UsbOperation();
private string iPaddress;
private System.Windows.Forms.PrintPreviewDialog printv_pos = null;
private System.Drawing.Printing.PrintDocument printd_pos = null;
public Form1()
{
InitializeComponent();
iPaddress = txt_Ip1.Text.Trim() + "." + txt_Ip2.Text.Trim() + "." + txt_Ip3.Text.Trim() + "." + txt_Ip4.Text.Trim();
}
private void btn_dk_Click(object sender, EventArgs e)
{
LoadPOSDll PosPrint = new LoadPOSDll();
//POS_COM_DTR_DSR 0x00 流控制為DTR/DST
//POS_COM_RTS_CTS 0x01 流控制為RTS/CTS
//POS_COM_XON_XOFF 0x02 流控制為XON/OFF
//POS_COM_NO_HANDSHAKE 0x03 無握手
//POS_OPEN_PARALLEL_PORT 0x12 打開并口通訊端口
//POS_OPEN_BYUSB_PORT 0x13 打開USB通訊端口
//POS_OPEN_PRINTNAME 0X14 打開打印機驅動程序
//POS_OPEN_NETPORT 0x15 打開網絡接口
if (PosPrint.OpenNetPort(iPaddress))//當參數nParam的值為POS_OPEN_NETPORT時,表示打開指定的網絡接口,如“192.168.10.251”表示網絡接口IP地址,打印時參考
{
Gp_IntPtr = PosPrint.POS_IntPtr;
txt_OPenState.Text = "打開網口成功!";
}
else
{
txt_OPenState.Text = "失敗!";
}
}
#region 端口地址修改
private void txt_Ip1_TextChanged(object sender, EventArgs e)
{
iPaddress = txt_Ip1.Text.Trim() + "." + txt_Ip2.Text.Trim() + "." + txt_Ip3.Text.Trim() + "." + txt_Ip4.Text.Trim();
}
private void txt_Ip2_TextChanged(object sender, EventArgs e)
{
iPaddress = txt_Ip1.Text.Trim() + "." + txt_Ip2.Text.Trim() + "." + txt_Ip3.Text.Trim() + "." + txt_Ip4.Text.Trim();
}
private void txt_Ip3_TextChanged(object sender, EventArgs e)
{
iPaddress = txt_Ip1.Text.Trim() + "." + txt_Ip2.Text.Trim() + "." + txt_Ip3.Text.Trim() + "." + txt_Ip4.Text.Trim();
}
private void txt_Ip4_TextChanged(object sender, EventArgs e)
{
iPaddress = txt_Ip1.Text.Trim() + "." + txt_Ip2.Text.Trim() + "." + txt_Ip3.Text.Trim() + "." + txt_Ip4.Text.Trim();
}
#endregion
#region 打印機狀態檢測(請先檢網關)
private void btn_QueryStatus_Click(object sender, EventArgs e)
{
Byte res = new Byte();
int ret = LoadPOSDll.POS_NETQueryStatus(iPaddress, out res);
StringBuilder sb = new StringBuilder();
if ((res & 0x10) == 0x10)
sb.AppendLine("打印機出錯!");
if ((res & 0x02) == 0x02)
sb.AppendLine("打印機脫機!");
if ((res & 0x04) == 0x04)
sb.AppendLine("上蓋打開!");
if ((res & 0x20) == 0x20)
sb.AppendLine("切刀出錯!");
if ((res & 0x40) == 0x40)
sb.AppendLine("紙將盡!");
if ((res & 0x80) == 0x80)
sb.AppendLine("缺紙!");
if (sb.Length > 0)
MessageBox.Show(sb.ToString());
}
#endregion
#region 簡單打印1
private void btn_Print1_Click(object sender, EventArgs e)
{
//LoadPOSDll PosPrint = new LoadPOSDll();
//POS_COM_DTR_DSR 0x00 流控制為DTR/DST
//POS_COM_RTS_CTS 0x01 流控制為RTS/CTS
//POS_COM_XON_XOFF 0x02 流控制為XON/OFF
//POS_COM_NO_HANDSHAKE 0x03 無握手
//POS_OPEN_PARALLEL_PORT 0x12 打開并口通訊端口
//POS_OPEN_BYUSB_PORT 0x13 打開USB通訊端口
//POS_OPEN_PRINTNAME 0X14 打開打印機驅動程序
//POS_OPEN_NETPORT 0x15 打開網絡接口
// if (LoadPOSDll.POS_StartDoc())
// {
// byte[] by_SendData = System.Text.Encoding.Default.GetBytes("今天到此一游~~\r\n");
// LoadPOSDll.POS_WriteFile(PosPrint.POS_IntPtr, by_SendData, (uint)by_SendData.Length);
// LoadPOSDll.POS_WriteFile(PosPrint.POS_IntPtr, new byte[] { 0x0a }, 1);
// LoadPOSDll.POS_EndDoc();
// }
print();
}
#endregion
#region 先預覽后打印
private void button1_Click(object sender, EventArgs e)
{
//打印預覽
PrintPreviewDialog ppd = new PrintPreviewDialog();
PrintDocument pd = new PrintDocument();
//設置邊距
Margins margin = new Margins(15, 15, 15, 15);
pd.DefaultPageSettings.Margins = margin;
紙張設置默認
PaperSize pageSize = new PaperSize("First custom size", getYc(70), 420);
pd.DefaultPageSettings.PaperSize = pageSize;
//打印事件設置
pd.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
ppd.Document = pd;
ppd.ShowDialog();
try
{
//print();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "打印出錯", MessageBoxButtons.OK, MessageBoxIcon.Error);
pd.PrintController.OnEndPrint(pd, new PrintEventArgs());
}
}
#endregion
private int getYc(double cm)
{
return (int)(cm / 25.4) * 100;
}
#region 打印的內容
#region 標題
public string GetPrintHead()
{
StringBuilder sb = new StringBuilder();
string tou = "重慶洞子老火鍋";
sb.Append(" " + tou + " \n");
return sb.ToString();
}
#endregion
#region 內容
public string GetPrintStr()
{
StringBuilder sb = new StringBuilder();
string address = "重慶涪陵XXX號";
string saleID = "2010930233330";
string item = "商品";
decimal price = 25.00M;
int count = 1;
decimal total = 0.00M;
decimal fukuan = 500.00M;
//sb.Append(" " + tou + " \n");
sb.Append("--------------------------------------------------\n");
sb.Append("日期:" + DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss") + "\n" + "單號:" + saleID + "\n");
sb.Append("--------------------------------------------------\n");
sb.Append("項目" + "\t" + "數量" + "\t" + "單價" + "\t" + "小計" + "\n");
for (int i = 0; i < count; i++)
{
decimal xiaoji = (i + 1) * price;
sb.Append(item + (i + 1) + "\t" + (i + 1) + "\t" + price + "\t" + xiaoji);
total += xiaoji;
if (i != (count))
sb.Append("\n");
}
sb.Append("--------------------------------------------------\n");
sb.Append("數量: " + count + " 合計: " + total + "\n");
sb.Append("付款: " + fukuan);
sb.Append(" 現金找零: " + (fukuan - total) + "\n");
sb.Append("--------------------------------------------------\n");
sb.Append("地址:" + address + "\n");
sb.Append("電話:123456789 123456789\n");
sb.Append(" 謝謝惠顧歡迎下次光臨 ");
return sb.ToString();
}
#endregion
#endregion
/// POS打印
///
public void print()
{
this.printv_pos = new System.Windows.Forms.PrintPreviewDialog();
this.printd_pos = new System.Drawing.Printing.PrintDocument();
this.printv_pos.AutoScrollMargin = new System.Drawing.Size(0, 0); //獲取或設置自動滾動邊距的大小
this.printv_pos.AutoScrollMinSize = new System.Drawing.Size(0, 0); //獲取或設置自動滾動條的最小大小
this.printv_pos.ClientSize = new System.Drawing.Size(400, 300); //獲取或設置窗體工作區的大小
this.printv_pos.Document = this.printd_pos; //獲取或設置要預覽的文檔
this.printv_pos.Enabled = true;
this.printv_pos.Name = "printPreviewDialog1";
this.printv_pos.Visible = false;
this.printd_pos.PrintController = new System.Drawing.Printing.StandardPrintController();
this.printd_pos.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage);
//設置邊距
System.Drawing.Printing.Margins margins = new System.Drawing.Printing.Margins(5, 5, 5, 5);
this.printd_pos.DefaultPageSettings.Margins = margins;
this.printd_pos.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("First custom size", getYc(70), 420);
//this.printDocument1.PrinterSettings.PrinterName = "";
//Margins margins = new Margins(
//this.printv_pos.Document = this.printd_pos;
printv_pos.PrintPreviewControl.AutoZoom = false;
printv_pos.PrintPreviewControl.Zoom = 1;
// this.printv_pos.ShowDialog(win);
try
{
printd_pos.Print();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
printd_pos.PrintController.OnEndPrint(printd_pos, new PrintEventArgs());
}
}
#region (頁面設置事件)字體設置
private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
Graphics g = e.Graphics;
//頭部
string strHeader = GetPrintHead();
Font ft = new Font("微軟雅黑", 12.5F, FontStyle.Bold); //字體
Point pt = new Point(0, 0); //頂部
g.DrawString(strHeader, ft, new SolidBrush(Color.Black), pt);
//Graphics.MeasureString 方法 (String,?Font)
//MeasureString測量用指定的 System.Drawing.Font 繪制的指定字符串
Size headSize = Size.Round(g.MeasureString(strHeader, ft)); //頭部的Size(寬和高)
headSize.Width = 0; //設置寬為0,是因為只需要向y移動,不需要x移動
//內容
string strFile = GetPrintStr();
ft = new Font("宋體", 8.5F, FontStyle.Regular);
pt = new Point(headSize); //Point(Size size)
g.DrawString(strFile, ft, new SolidBrush(Color.Black), pt);
SizeF strSize = g.MeasureString(strHeader, ft);
}
#endregion
}
}
總結
以上是生活随笔為你收集整理的c# 小票机打印二维条码_C#小票打印机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: adb 黑域app_黑域app|黑域手机
- 下一篇: 如何实现office不同语言界面切换