1. 配置打印模板
【基礎(chǔ)設(shè)置(集團)】-【打印配置】
image.png
實體:需要打印的實體
數(shù)據(jù)類型:常量、字段(取值來自實體)
字段:實體下的字段
字段(公式):通過公式取值
打印類型:文本、條碼载弄、二維碼
數(shù)據(jù):當(dāng)數(shù)據(jù)類型為常量時需要維護常量的值
PosX:數(shù)據(jù)在紙張上的橫軸位置單位dot
PosY:數(shù)據(jù)在紙張上的豎軸位置單位dot
字段高度:當(dāng)打印類型為文本時有效
對齊方式:
條碼類型:當(dāng)打印類型為條碼時有效
數(shù)據(jù)長度/小數(shù)位數(shù):數(shù)據(jù)為字符串時用于截取字符串的長度,數(shù)據(jù)為數(shù)字時小數(shù)位數(shù)有效
日期格式:數(shù)據(jù)為日期時對日期進行格式化
數(shù)據(jù)截取類型:當(dāng)數(shù)據(jù)為字符串時截取字符串(從左截取撵颊、從右截扔罟ァ)
1.1. 字段
用于設(shè)置數(shù)據(jù)的取值來源,使用字段(公式)實現(xiàn)更加靈活的取值方式倡勇。
1.2. 字段(公式)
image.png
- 由于未實現(xiàn)字段的樹形參照逞刷,通過此字段取層級深的數(shù)據(jù)比如取標(biāo)準(zhǔn)銷售-客戶-立賬條件的名稱,字段(公式):
OrderBy.Customer.ARConfirmTerm.Name - 通過中間表取數(shù)妻熊,取收款計劃的收款的整單金額夸浅,字段(公式):
Entity:UFIDA.U9.SM.InstalmentRecSchedule.InstalmentRecSchedule:DocID=ID:Status - 通過(OrderBy.Customer.ARConfirmTerm.Name+驗)可以實現(xiàn)動態(tài)數(shù)據(jù)(OrderBy.Customer.ARConfirmTerm.Name)+靜態(tài)數(shù)據(jù)(驗)
2. 安裝WebPrint、配置打印機IP(打印機連接的電腦的IP)
2.1. 安裝WebPrint
- WebPrint下載地址:
https://s3.cn-north-1.amazonaws.com.cn/godex/GXDXqOixaOHR6gZvVnUBgQ.file?v01 - 只有連接打印機的電腦需要安裝WebPrint,電腦安裝好WebPrint并連接好打印機后在U9配置打印機IP
2.2. 配置打印機IP
【基礎(chǔ)設(shè)置(集團)】-【公共設(shè)置】-【參數(shù)設(shè)置】配置【連接打印機的電腦的IP地址】
2.3. 網(wǎng)絡(luò)配置
U9服務(wù)器需要可以訪問打印機連接電腦的IP
3. 選擇扔役、修改打印數(shù)據(jù)题篷、打印
3.1. 選擇需要打印的數(shù)據(jù)
image.png
選擇需要打印的數(shù)據(jù)點擊打印條碼
3.2. 修改需要打印的數(shù)據(jù)
image.png
3.3 調(diào)用打印機
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web.Script.Serialization;
using UFIDA.U9.Cust.IESLabBE.CommonBE;
using UFIDA.U9.Cust.IESLabBP.Util;
namespace UFIDA.U9.Cust.IESLabBP.PrinterBP
{
/// <summary>
/// 科誠Web打印
/// </summary>
class GoDEXWebPrinter
{
private const string PROFILE_GODEXWEBURL = "GoDEXWebUrl";
/// <summary>
/// 向打印機發(fā)送打印請求
/// </summary>
/// <param name="commond"></param>
/// <param name="printData"></param>
private void DoCommand(string commond, PrintData printData)
{
string url = GetGoDEXWebUrl() + commond+"/";
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "Post";
request.ContentType = "application/x-www-form-urlencoded";
string data = SerializeToJSONString(printData);
data = Convert.ToBase64String(Encoding.Default.GetBytes(data));
data = "EncodeData=" + data;
request.ContentLength = data.Length;
using (var postStream = new StreamWriter(request.GetRequestStream()))
{
postStream.Write(data);
}
var response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader=new StreamReader(response.GetResponseStream()))
{
reader.ReadToEnd();
}
}
/// <summary>
/// 發(fā)送需要打印的數(shù)據(jù)
/// </summary>
/// <param name="data"></param>
private void PrintDataCommand(List<PrintDataDTO> data)
{
foreach (PrintDataDTO printData in data)
{
PrintData printConfig = new PrintData(printData);
CommandEnum commandEnum = CommandEnum.ecTextOut;
if (printData.DataType.Value== DataTypeEnum.BarCode.Value)
{
commandEnum = CommandEnum.PrintBarcode;
}
if (printData.DataType.Value == DataTypeEnum.QRCode.Value)
{
commandEnum = CommandEnum.PrintQrcode;
}
DoCommand(commandEnum.ToString(), printConfig);
}
}
/// <summary>
/// 發(fā)送開始打印請求
/// </summary>
private void SendLCommand()
{
PrintData printConfig = new PrintData();
printConfig.Data = Convert.ToBase64String(Encoding.Default.GetBytes("^L"));
DoCommand(CommandEnum.Send.ToString(), printConfig);
}
/// <summary>
/// 發(fā)送打印結(jié)束請求
/// </summary>
private void SendECommand()
{
PrintData printConfig = new PrintData();
printConfig.Data = Convert.ToBase64String(Encoding.Default.GetBytes("E"));
DoCommand(CommandEnum.Send.ToString(), printConfig);
}
/// <summary>
/// 打印
/// </summary>
/// <param name="data"></param>
public void Print(List<PrintDataDTO> data)
{
SendLCommand();
PrintDataCommand(data);
SendECommand();
}
/// <summary>
/// 對象轉(zhuǎn)JSON字符串
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
private string SerializeToJSONString(object obj)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
return jss.Serialize(obj);
}
/// <summary>
/// 獲取打印機IP地址
/// </summary>
/// <returns></returns>
private string GetGoDEXWebUrl()
{
string baseUrl=ProfileUtils.GetProfileValue(PROFILE_GODEXWEBURL);
if (string.IsNullOrEmpty(baseUrl))
{
throw new Exception("請先在【基礎(chǔ)設(shè)置(集團)】-【參數(shù)設(shè)置】中添加連接科德打印機的電腦的IP地址");
}
return baseUrl;
}
}
/// <summary>
/// 傳給打印機的數(shù)據(jù)
/// </summary>
class PrintData
{
public string Interface { get; set; }
public string USB { get; set; }
public string COM { get; set; }
public string BaudRate { get; set; }
public string LPT { get; set; }
public string IP { get; set; }
public string Port { get; set; }
public string PosX { get; set; }
public string PosY { get; set; }
public string FontHeight { get; set; }
public string Height { get; set; }
public string Wide { get; set; }
public string Narrow { get; set; }
public string FontName { get; set; }
public string Align { get; set; }
public string Data { get; set; }
public string BarcodeType { get; set; }
public string Readable { get; set; }
private void CommondInstance()
{
Interface = "USB";
USB = "";
COM = "";
BaudRate = "";
LPT = "";
IP = "";
Port = "";
PosX = "";
PosY = "";
FontHeight = "";
Height = "";
Wide = "";
Narrow = "";
FontName = "";
Align = "";
Data = "";
BarcodeType = "";
Readable = "";
}
public PrintData()
{
CommondInstance();
}
public PrintData(PrintDataDTO printData)
{
CommondInstance();
PosX = printData.PosX.ToString();
PosY = printData.PosY.ToString();
Data = Convert.ToBase64String(Encoding.Default.GetBytes(printData.Data));
FontHeight = printData.FontHeight.ToString();
Height = printData.FontHeight.ToString();
Align = printData.Align.Value.ToString();
BarcodeType = printData.BarcodeType.Value.ToString();
Readable = printData.Readable.Value.ToString();
Narrow = printData.Narrow.ToString();
Wide = printData.Wide.ToString();
}
}
enum CommandEnum
{
Send,ecTextOut, PrintBarcode, PrintQrcode
}
}