POS小票打印机分为热敏和针式俩种。

打印纸的宽度分为58毫米、76毫米和80毫米三种。

打印接口分为:串口、并口、USB和网口(以太网)。

热敏打印机速度较快,打印的时候噪音少,针打可以使用多联纸自动复印。

热敏打印机价格一般比较便宜,不需要频繁地更换色带。

并口打印机,可直接"端口输出",不需要安装打印机的驱动程序。

几乎所有的POS小票打印机都可以兼容EPSON的ESC POS打印机指令。

const
// 末尾走纸几行
c_run_paper_lines = 6;
// ESC指令 开钱箱
c_OpenMoneyBoxCommand = CHR(27) + CHR(112) + CHR(0) + CHR(17) + CHR(8);
// ESC指令 自动切纸
c_cut_paper = CHR(29) + CHR(86) + CHR(66) + CHR(0);

type // usb接口票打用
TOutBufPassThrough = record
nDataLen: word;
sEscData: array [0 .. 1024] of AnsiChar;
end;

// usb接口开钱箱

procedure OpenUSBMoneyBox;
var
prt: TPrinter;
esc: TOutBufPassThrough;
begin
try
prt := Printers.Printer;
prt.beginDoc;
esc.nDataLen := Length(c_OpenMoneyBoxCommand);
strpCopy(esc.sEscData, c_OpenMoneyBoxCommand);
windows.ExtEscape(prt.Handle, PASSTHROUGH, sizeOf(esc), @esc, 0, nil);
prt.endDoc;
except

end;
end;

// usb接口切纸

procedure usbCutPaper;
var
prt: TPrinter;
esc: TOutBufPassThrough;
begin
try
prt := Printers.Printer;
prt.beginDoc;
esc.nDataLen := Length(c_cut_paper);
strpCopy(esc.sEscData, c_cut_paper);
windows.ExtEscape(prt.Handle, PASSTHROUGH, sizeOf(esc), @esc, 0, nil);
prt.endDoc;
except

end;
end;

procedure TfrmReprint.Print80;
var
sPort: string;
RPrinter: TextFile;
i: Integer;
sBill, sBarcode, sXH, sPortType: string;
MyList: TStringList;
BillId: string;
sTmp: string;
iTmp: Integer;
sMoney: string;
sGoodName: string;
iLen: Integer;
sTmp2: string;
begin
// 生成一个小票的文本文件
sBill := ExtractFilePath(Application.ExeName) + 'bill.txt';
AssignFile(RPrinter, sBill);
Rewrite(RPrinter);
try
// 店名
Writeln(RPrinter, ' ' + UserInfo.ShopName);
Writeln(RPrinter, '机号 收款员 交易流水号');

sTmp := UserInfo.MachineId + ' ' + UserInfo.UserCode;
iTmp := 32 - Length(sTmp);
i := Length(cdsMaster.FieldByName('saleno').Text);
while i < iTmp do
begin
BillId := BillId + ' ';
i := i + 1;
end;
BillId := BillId + cdsMaster.FieldByName('saleno').Text;

Writeln(RPrinter, sTmp + BillId);
Writeln(RPrinter, '印小票时间:' + FormatDatetime('yyyy-mm-dd hh:nn', now));
Writeln(RPrinter, '-------------------------------------');
cdsDetail.First;
while not cdsDetail.Eof do
begin
// 序号
sXH := cdsDetail.FieldByName('Sequence').Text;
while Length(sXH) < 2 do
begin
sXH := sXH + ' ';
end;
// 金额
sMoney := FormatFloat('0.00', cdsDetail.FieldByName('amount').AsFloat);
i := Length(sMoney);
sTmp := '';
while i < 9 do
begin
sTmp := sTmp + ' ';
i := i + 1;
end;
sMoney := sTmp + sMoney;
// 商品名称
sGoodName := cdsDetail.FieldByName('goodsName').Text;
iLen := Length(sGoodName);
while iLen < 9 do
begin
sGoodName := sGoodName + ' ';
iLen := iLen + 1;
end;
Writeln(RPrinter, sXH + ' ' + sGoodName + cdsDetail.FieldByName('qty')
.Text + '*' + FormatFloat('0.00', cdsDetail.FieldByName('buyPrice')
.AsFloat) + sMoney);
cdsDetail.Next;
end;
Writeln(RPrinter, '-------------------------------------');
Writeln(RPrinter, '金额:' + FormatFloat('0.00',
cdsMaster.FieldByName('BalanceAmount').AsFloat));
Writeln(RPrinter, sTmp2);
Writeln(RPrinter, ' 谢谢惠顾!');
// 末尾走纸 行数
for i := 1 to c_run_paper_lines do
Writeln(RPrinter, '');
finally
CloseFile(RPrinter);
end;
if SameText(UserInfo.PrintPort, 'lpt') then // 直接并口输出 不要安装票打驱动
begin
// 读取文本文件打印小票
sPort := 'LPT1';
MyList := TStringList.Create;
try
AssignFile(RPrinter, sPort);
try
Rewrite(RPrinter);
MyList.LoadFromFile(sBill);
for i := 0 to MyList.Count - 1 do
begin
Writeln(RPrinter, MyList.Strings[i]);
end;
// 开钱箱
write(RPrinter, c_OpenMoneyBoxCommand);
write(RPrinter, c_cut_paper);
CloseFile(RPrinter);
except
// 如果LPT1端口不存在,会报错:the specified file not found
// 有些主板不提供LPT并口,不屏蔽错误,无法收银
end;
finally
MyList.Free;
end;
end
else if SameText(UserInfo.PrintPort, 'usb') then // 需要安装票打驱动
begin
try
RichEdit1.Font.Size := 12;
RichEdit1.Lines.Clear;
RichEdit1.Lines.LoadFromFile(sBill);
RichEdit1.Print('');
if UserInfo.openMoneyBox = 1 then
OpenUSBMoneyBox;
except
on e: Exception do
SysLog.WriteLog('TfrmReprint.Print80' + e.Message);
end;
end;
end;

怎样做出通用的pos小票打印程序的更多相关文章

  1. C# POS 小票打印

    网上查了好多资料终于让我捣鼓出来了! public partial class Models_JXC_Sale_actNewSalePage : WebPartBase { public string ...

  2. 【转】C#使用ESC指令控制POS打印机打印小票

    .前言 C#打印小票可以与普通打印机一样,调用PrintDocument实现.也可以发送标注你的ESC指令实现.由于 调用PrintDocument类时,无法操作使用串口或TCP/IP接口连接的pos ...

  3. C#使用ESC指令控制POS打印机打印小票

    1.前言 C#打印小票可以与普通打印机一样,调用PrintDocument实现.也可以发送标注你的ESC指令实现.由于 调用PrintDocument类时,无法操作使用串口或TCP/IP接口连接的po ...

  4. 重复造轮子系列——基于FastReport设计打印模板实现桌面端WPF套打和商超POS高度自适应小票打印

    重复造轮子系列——基于FastReport设计打印模板实现桌面端WPF套打和商超POS高度自适应小票打印 一.引言 桌面端系统经常需要对接各种硬件设备,比如扫描器.读卡器.打印机等. 这里介绍下桌面端 ...

  5. Ajax使用WCF实现小票pos机打印源码

    通过ajax跨域方式调用WCF服务,实现小票pos机的打印,源码提供web方式,客户端方式测试,服务驻留右侧底部任务栏,可控制服务开启暂停,用户可自定义小票打印模板,配合零售录入. qq  22945 ...

  6. linux下使用小票打印

    linux下使用小票打印 打印机: Xprinter XP-58IIH指令支持: ESC/POS接口: USB, 蓝牙 Linux系统: Centos7 蓝牙配对很快, 配对好后就是连接状态. 但很快 ...

  7. Delphi 10 Seattle 小票打印控件TQ_Printer

    TQ_Printrer控件,是一个为方便需要控制打印命令而设计的跨平台专用控件,已包含标准ESC/POS打印控制的基本指令在内(这些基本指令已能很好的满足多数项目使用). TQ_Printrer控件让 ...

  8. c# 小票打印

    c# 在进行小票打印时大致有三种方法. 1. 使用水晶报表进行打印.可以参考:https://www.cnblogs.com/aitong/p/10717786.html 2. 在 PrintDocu ...

  9. Android打印机--小票打印格式及模板设置

    小票打印就是向打印设备发送控制打印格式的指令集,而这些打印格式须要去查询相应打印机的API文档,这里我把经常使用的api给封装了一下 文字对齐方式 打印字体大小 字体是否加粗 打印二维码 打印条形码 ...

随机推荐

  1. 实战中总结出来的CSS常见问题及解决办法

    一.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值. 二.同一个的class选择符可以在一个文档中重复出现,而id选择符却只能出现一次.对 一个标签同时使用cla ...

  2. codeforces 391C3 - The Tournament

    在第8组数据上WA了一天,后来才发现问题: #include<iostream> #include<cstdio> #include<cstring> #inclu ...

  3. Angular2经典文章集锦

    Angular Metadata 等基础知识 http://www.jianshu.com/p/aeb11061b82c Metadata告诉Angular如何处理一个类,只有我们将它通告给Angul ...

  4. Cassandra命令行CLI的基本使用

    启动cassandra-cli服务之后,可以进行CQL的使用. 1. 创建keyspace 可以理解成关系数据库的database [default@testkeyspace] create keys ...

  5. 汇编 db,dw,dd的区别

    db定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1 dw定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2 dd定义双字类型变量,一个双字数据占4个字节单元,读完一个, ...

  6. gdb查看虚函数表、函数地址

    1. 查看函数地址     看函数在代码的哪一行,使用info line就可以看到类似下面这中输出 点击(此处)折叠或打开 (gdb) info line a.cpp:10 Line 10 of &q ...

  7. java数组或集合返回空的问题

    在有返回值的情况下,平时我写代码基本遇到错误什么都是返回null,我因为我觉得把数组或集合这个初始化占空间. 但是我发现这样在每次客户段调用都要进行非空判断,而且有时调用内置api还容易报错误,于是解 ...

  8. 【HDOJ】1225 Football Score

    这种结构体排序的题,十分容易考上机题,qsort+结构体解决.马上就要机考了,多练习一下这样的题目也好. #include <stdio.h> #include <string.h& ...

  9. Item Import: What Does "Sync" Items Do? (Doc ID 417887.1)

    In this Document Goal Solution APPLIES TO: Oracle Item Master - Version 11.5.10.0 to 11.5.10.0 [Rele ...

  10. URAL1018. Binary Apple Tree

    链接 简单树形DP #include <iostream> #include<cstdio> #include<cstring> #include<algor ...