(转)小票打印

python打印小票_pyqt5 商店小票打印的实现模板 说明最近在用pyqt5做商店小票打印,用的是得力DL-581PW(NEW)热敏小票打印机。商店小票打印,属于escpos打印。在网上找了很多实现方法,看了很多相关文章,经历了很多困难,最后终于实现了。这里先分享一下我看过的文章和尝试过的方法,最后分享我的实现套路。一.使用execl打印很多场景,我都是使用win32com模块的execl打印,基本能解决大部分的打印问题。(相关的方法网上也有,可以找... 阅读详情

内容转自:http://hotthing.blog.163.com/blog/static/2967030920090345613676/ 

 

向LPT口打印一个文本文件  
  procedure   TPosFrm.PrintFile(AFileToPrint:   string);  
  var  
    Port,   FileToPrint:   TextFile;  
    ALine:   string;  
  begin  
    AssignFile(FileToPrint,   AFileToPrint);  
    Reset(FileToprint);  
    AssignFile(Port,   'LPT1');  
    Rewrite(Port);  
    while   not   Eof(FileToPrint)   do  
    begin  
        Readln(FileToPrint,   ALine);  
        Writeln(Port,   ALine);  
    end;  
    CloseFile(Port);  
    CloseFile(FileToPrint);  
  end;  
   
   
        //   打印小单  
        //   输出到文本,稍后再输出到LPT1端口;  
        OutFile:=ExtractFilePath(Application.ExeName)+'output.txt';  
        AssignFile(F,   OutFile);  
        Rewrite(F);  
        CompanyTitle:=SysParms.CompanyTitle+'购物清单';  
        CompanyTitle:=StringOfChar('   ',   (32-Length(CompanyTitle))   div   2)+CompanyTitle;  
        Writeln(F,   CompanyTitle);  
        Writeln(F,'--------------------------------');  
  //         Writeln(F,'收银机:'+EdPosID.Text+'           单号:'+EdSaleID.Text);  
  //         Writeln(F,'收银员:'+EdOpID.Text+   '           日期:'+EdSaleDate.Text);  
        Write(F,'收银员:',   Format('%-10s',   [STOpID.Caption]));  
        Writeln(F,   '单号:'+STSaleID.Caption);  
        Writeln(F,'日期:'+STSaleDate.Caption+   '     时间:'+FormatDateTime('hh:mm:ss',   Now));  
        Writeln(F,'--------------------------------');  
        //                   12345678901234567890123456789012  
        Writeln(F,'商品名称                   数量   单价     金额');  
   
        ADSSaleList.DisableControls;  
        ADSSaleList.First;  
        while   not   ADSSaleList.Eof   do  
        begin  
            MerName:=ADSSaleList.FieldValues['MerName'];  
            len:=Length(MerName);  
            if   len   <   18   then  
                MerName:=MerName+StringOfChar('   ',   18-len);  
            if   (len   mod   2)   =   0   then  
                Write(F,   Copy(MerName,   1,   18))  
            else  
                Write(F,   (Copy(MerName,   1,   17)+'   '):18);  
            Write(F,   ADSSaleList.FieldValues['Qty']:2);  
            Write(F,   FormatFloat('0.0',   ADSSaleList.FieldValues['Price']):6);  
            Writeln(F,   FormatFloat('0.0',   ADSSaleList.FieldValues['Amount']):6);  
            ADSSaleList.Next;  
        end;  
        ADSSaleList.EnableControls;  
   
        Writeln(F,'--------------------------------');  
        Writeln(F,'合计:',STHj.Caption:8,   '         让利:',   STRl.Caption:8);  
        Writeln(F,'实收:',STSs.Caption:8,   '         金卡:',  
                        FormatCurr('0.00',   CardPayment):8  
                        );  
        Writeln(F,'现金:',  
                        FormatCurr('0.00',   StrToCurr(EdCash.Text)-CardPayment):8,  
                        '         找补:',   STBack.Caption:8  
                        );  
        Writeln(F,'   ');   //空行,添加或减少空行即可控制出纸多少。  
        ...  
        PrintFile(Outfile);   //   输出文件到打印口    
   
   
   
  输出如下例:  
   
          XX化妆品世界购物清单  
  --------------------------------  
  收银员:01                 单号:000000329  
  日期:2003-07-16     时间:17:53:28  
  --------------------------------  
  商品名称                   数量   单价     金额  
  8g华美健强力消痘乳   4     16.0     64.0  
  小口红                           1       5.0       5.0  
  180g隆力奇蛇胆不紧   3     20.8     62.4  
  速效脱毛露                   2       7.5     15.0  
  美容海藻面膜               3     18.0     54.0  
  蕾琪唇彩                       1     12.0     12.0    
  .....  
  --------------------------------  
  合计:   2058.40         让利:         0.00  
  实收:   2058.40         金卡:         0.00  
  现金:   2100.00         找补:       41.60  
   
   
  因宽度只有58mm,故商品名切去部分。

 


如果没有装打印机的话,怎样让它跳出  
  //   向LPT口打印一个文本文件  
  procedure   TPosFrm.PrintFile(AFileToPrint:   string);  
  var  
    Port,   FileToPrint:   TextFile;  
    ALine:   string;  
  begin  
    AssignFile(FileToPrint,   AFileToPrint);  
    Reset(FileToprint);  
    AssignFile(Port,   'LPT1');  
    Rewrite(Port);  
    while   not   Eof(FileToPrint)   do  
    begin  
        Readln(FileToPrint,   ALine);  
        Writeln(Port,   ALine);  
    end;  
    CloseFile(Port);  
    CloseFile(FileToPrint);  
  end;  
   
  这段程序?不然程序无响印了.

 

如果小票打印机是没有带硬字库的怎么打呢?如EPSON   210PD。  
     
    有两种方式:一是利用驱动,这样的话,楼上的方式就不行了,必须是利用windows打印。需要利用windows打印函数,或者报表工具来打印。  
                          二是采用图形方式打印,利用windows自带或者ucdos带的字库。把每个汉字转换成图形点阵字符串,然后用楼上的方式发送给打印机。  

 

钱箱是打印机驱动的  
  Var   F:TextFile;  
  PDStr:string;  
  begin  
      AssignFile(F,   'LPT1');  
      Rewrite(F);  
      //初始化  
      PDStr:=chr(27)+chr(64);  
      Write(F,   PDStr);  
      //开钱箱  
      PDStr:=   Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255);  
      Write(F,   PDStr);  
      CloseFile(F);
  end


不同的钱箱可以弹出的指令会有所不同,一般在厂家的说明书上有提供的  
  如果指令是:27,112,0,100,100,你可以用下面的代码打开钱箱.  
  Open   "LPT1"   For   Output   As   #1  
  Print   #1,chr(27)   &   chr(112)   &   chr(0)   &   chr(100)   &   chr(100)  
  close   #1

 

 

function   WritePrinter(   s:string):boolean;stdcall;  
  var  
   
        hPrn   :   THandle;  
        c:Cardinal;  
  begin  
   
      hPrn   :=   CreateFile('LPT1',  
                      GENERIC_WRITE   or   GENERIC_READ,  
                      0,  
                      nil,  
                      OPEN_EXISTING,  
                      FILE_ATTRIBUTE_NORMAL,  
                      0);  
      if   hPrn   =   INVALID_HANDLE_VALUE   then  
        begin  
          result:=false;  
          exit;  
        end;  
      c:=0;  
      WriteFile(hPrn,  
                          PChar(s)^,  
                          Length(s),  
                          c,  
                          nil);  
   
      CloseHandle(hPrn);  
      result:=true;  
  end;  
  function   PrintTkt(   name:string;   car:string;   fee:string;  
                                              sfy:string;   y1,y2,y3,y4,y5,y:single):boolean;stdcall;  
  var  
      s:string;  
      t,i:integer;  
      temp:Integer;  
  begin  
   
        temp:=GetPrinterStatus;  
        temp:=temp   and   $f0   ;  
        case   temp   of  
          $d0:   begin  
   
   
        t:=round(6*y/2.54);  
        s:=#27   +   #50   +#27   +   'C'   +   char(t)+#27   +   #68   +   #01   +   #12   +#27+#108   +   #0;  
        t:=round(6*y1/2.54);  
   
        for   i:=0   to   t-1   do  
          s:=s+   #10;  
        s:=s+#09+name;  
        t:=round(6*(y2-y1)/2.54);  
   
        for   i:=0   to   t-1   do  
          s:=s+   #10;  
          s:=s+#09+car;  
        t:=round(6*(y3-y2)/2.54);  
        for   i:=0   to   t-1   do  
          s:=s+   #10;  
          s:=s+#09+fee;  
        t:=round(6*(y4-y3)/2.54);  
   
        for   i:=0   to   t-1   do  
          s:=s+   #10;  
          s:=s+#09+sfy;  
        t:=round(6*(y5-y4)/2.54);  
        for   i:=0   to   t-1   do  
          s:=s+   #10;  
          s:=s+#09+FormatDateTime('yyyy-mm-dd',Now);  
          s:=s+   #10;  
          //s:=s+#27   +   'D'   +   #32;  
          s:=s+#09+#09+FormatDateTime('HH:MM:SS',Now);  
   
          s:=s+   #12;  
   
   
        if   WritePrinter(s)   then   result:=true  
        else  
          result:=false   ;  
        end;  
              $70:   Showmessage('打印机没打开,请检查打印机');  
              $60:   Showmessage('打印机缺纸,请检查打印机');  
              $40:   Showmessage('打印机盖子没盖好,请检查打印机');  
        end;  
   
   
  end;
手头上有一个项目需要web下打印小票,就是超市里面打印的小票

用iframe存放 打印内容
iframe(id).focus();
iframe(id).print();
注意,本方法会弹出系统打印机选择窗口

<object id="WebBrowser" width=0 height=0 classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2">
</object>

<input type=button value=打印 onclick=document.all.WebBrowser.ExecWB(6,1)>
<input type=button value=直接打印 onClick="document.all.WebBrowser.ExecWB(6,6);">
<input type=button value=页面设置 onclick=document.all.WebBrowser.ExecWB(8,1)>
<input type=button value=打印预览 onClick="document.all.WebBrowser.ExecWB(7,1);">

这个方法可以不弹出选择窗,但是要启用ActiveX


wintable控件...有免费的....

python操作tsc打印机打印标签 python操作tsc打印机打印标签... 立即下载

相关推荐

Python地理空间库安装指南:从gdal到geopandas的完整流程

本文详细介绍了Python地理空间库的完整安装流程,包括gdal、rasterio和geopandas等核心库的安装与配置。通过Anaconda环境管理和conda-forge频道,帮助开发者高效解决依赖问题,确保地理空间数据处理环境的稳定运行。

weixin_29091105的博客 464

python调用小票打印机_PyQt5中使用Qprinter打印热敏小票

在《PyQt5中使用QWebChannel和内嵌网页进行js交互》一文中,我记录了如何使用QWebchannel与内嵌网页进行js交互,其根本目标在于使用Qt5调起打印机服务。在这篇文章中我将介绍一下具体使用Qprinter打印超市热敏小票的过程。PyQt5中使用Qprinter打印热敏小票参考内容:Qt5官方文档《pyqt5的 QPrinter 使用模板》 by 一心狮本文包含以下内容:1.使用...

weixin_39750854的博客 2152

gephi生成网络关系图_路网拓扑重建专题 (3) 网络图生成

城市道路网建模在获得基础路网之后,需要考虑道路交通网络的描述与表达问题。网络是将现实世界中的事物及其关系进行适当的抽象,构造成由节点和边按照一定规则组成的形式。一个实体网络可以由有限个“节点”集合与“边”集合构成的图表示,即网络表示为。对于一个由个节点组成的无权复杂网络,该图有邻接矩阵,这里。根据研究对象不同,建模方法主要包括原始法[1]和对偶法[2]两种,见图1,字母a-j为交叉口编号...

weixin_39761195的博客 3504

Python实例1—打印购物小票

首先录入商品信息,再购买商品,最后打印购物小票

好人一生快乐 9547

Git GUI学习教程

学习宗旨:快速应用,不易忘记 很遗憾,申请Git的专栏未审批,那我就不再写专栏了,把最近的学习心得写一下,我也是在学习中进行,有任何问题直接留言,回复交流,我还采用思路+实践模式快速过。 目录 1、Git是什么 2、远程仓库 1)GitHub: 2)Gitee(码云): 3、安装Git(Windows) 1)下载 ...

Alexantao 的专栏 7252

如何利用CN3791实现太阳能电池板对锂电池的高效充电管理

本文详细介绍了如何利用CN3791芯片实现太阳能电池板对锂电池的高效充电管理。CN3791集成了MPPT(最大功率点跟踪)功能,能智能调节太阳能板的输出,确保在不同光照条件下获得最大功率。文章涵盖芯片工作原理、外围电路设计、充电全过程管理及实际应用经验,帮助开发者优化太阳能充电系统效率。

weixin_33709219的博客 499

用python打印购物小票和证书

在使用python打印东西时一定要注意到缩进,在python语言中对缩进很重视 input用来接收数据 input后边小括号可以写接受数据的条件 在定义常量或者变量名时,最好找有意义的字母或者单词代替,方便理解代码

m0_66528514的博客 1万+

ReelShort Android 逆向实战:Frida Hook 定位 sign 与 requestTime 算法

一个动态变化的 sign,如何从海量 so 逻辑中精准定位并完整复现?本文以海外短剧 App ReelShort 为例,实战拆解搜索、列表与详情接口的分析过程:从 Charles 抓包锁定关键参数,到 jadx 定位 native 函数,再借助 Frida Hook 验证加密结果;逐步还原 requestTime 的生成机制及 sign 的 HMAC-SHA256 签名逻辑。全文记录关键思路、踩坑与验证方法,带你建立一套可迁移的 Android 接口逆向分析流程。

weixin_64116813的博客 456

python打印购物小票

非常之详细,请认真看完。 目前有以下几件产品供你购买,并且此商店清仓大甩卖所有商品打九折。 金士顿U盘8G------40元/个 胜创16GTF卡------50元/个 读卡器-----------8元/个 网线两米---------5元/根 我们写下代码: print('此商店清仓大甩卖所有商品打九折') print('金士顿U盘8G------40元/个') print('胜创16GTF卡------50元/个') print('读卡器-----------8元/个') print('网线两

weixin_67485407的博客 2万+

智能水下机器人设计: 基于MATLAB的水下机器人动力学建模和控制系统设计,包括水下环境感知、路径规划和任务执行等

智能水下机器人是指能够在水下自主完成各种任务的机器人,例如探测、勘察、救援等。它具有广阔的应用前景,可用于海洋环境监测、水下考古、海上作业等领域。基于MATLAB的水下机器人设计可以为科研人员和工程师提供强大的建模和仿真工具,帮助他们设计更智能、更高效的水下机器人。智能水下机器人是未来海洋科技发展的重要方向,它将为海洋科学研究、水下考古和海上作业等领域带来新的机遇。MATLAB是一种功能强大的数学和科学计算软件,它可以为智能水下机器人设计提供强大的工具和支持。

走向CTO的路上... 962

沁恒CH32V30X学习笔记02--GPIO的使用教程及2次封装驱动

刚复位后,GPIO 口运行在初始状态,这时大多数 IO 口都是运行在状态所有的 GPIO 口都可以被配置外部中断输入通道,但一个外部中断输入通道最多只能映射到一个GPIO 引脚上,且外部中断通道的序号必须和 GPIO 端口的位号一致,,两方都是一对一的关系。复用功能。

Car12 706

[转] QT 小票打印

原地址: http://www.cppblog.com/biao/archive/2009/09/08/95603.html QString htmlString = QString("<html>") + str1 + str2 +str3 + finerysInfo + str5 + str6 + QString("<br>...

weixin_30279671的博客 189

AHB—SRAMC项目(结构图,核心代码、Testbench架构)

文章目录一、AHB_SRAMC项目介绍1.1.AHB总线控制单元(ahb_slv_if.v)1.2.SRAM控制单元(sramc_top.v)1.3.主要的传输路径二、结构框图2.1.AHB_SRAMC结构图(重点)2.2.总线控制单元与SRAM控制单元结构图三、部分核心代码(重点理解)四、SystemVerilog Testbench架构(重点)五、目录结构 一、AHB_SRAMC项目介绍 本项...

Mr.翟的博客 3万+

转:C#并口热敏小票打印机打印位图

最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了。 这是DEMO的窗体: 下面是打印所需要调用的代码: [html] view plaincopy classLptControl { privatestringLptStr="lpt1"; publ...

weixin_33859504的博客 290

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

c#餐饮系统打印机_C# 小票打印机 直接打印 无需驱动[转]

class LPTControl{#region API函数[StructLayout(LayoutKind.Sequential)]private struct OVERLAPPED{int Internal;int InternalHigh;int Offset;int OffSetHigh;int hEvent;}[DllImport("kernel32.dll")]private stat...

weixin_29008805的博客 464

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

pyqt5 listview 不默认选中_pyqt5 商店小票打印的实现模板

说明最近在用pyqt5做商店小票打印,用的是得力DL-581PW(NEW)热敏小票打印机。商店小票打印,属于escpos打印。在网上找了很多实现方法,看了很多相关文章,经历了很多困难,最后终于实现了。这里先分享一下我看过的文章和尝试过的方法,最后分享我的实现套路。一.使用execl打印很多场景,我都是使用win32com模块的execl打印,基本能解决大部分的打印问题。(相关的方法网上也...

weixin_39713805的博客 186

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C# 小票打印机 直接打印 无需驱动[转]

class LPTControl { #region API函数 [StructLayout(LayoutKind.Sequential)] private struct OVERLAPPED { int Internal; int InternalHigh; int O...

weixin_33813128的博客 653

qt实现小票打印

1.需求需要实现订单结算后的小票打印,要求能打印商品数据和结算数据及将小票号打印成条码,退货或查询时能通过扫描枪扫描条码快速查询到订单信息2.解决1.通过将数据转化为html后调用qt进行打印,打印机无法打印img标签中的条码2.通过将数据转化为html,将条码直接绘制的方法实现了需求3.代码Barcode.h// Barcode.h: interface for the CBarcode clas

zhang_ruiqiang的博客 5944

POS58打印机的操作

在销售终端中,小票打印总是必不可少的。 下面记录一段使用C#简单的实现打印的方法 首先安装pos58的驱动,我这里使用的是usb转串口线 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

古不灵,精不怪 的博客 2343

pci转并口卡的安装使用

pci转并口卡模拟出来的并口并不能完全等同于主板上真正的并口。真正的并口打印的时候可以“直接瓶口输出”打印,而不需要安装打印驱动程序。 这个模拟出来的并口却不能使用“直接瓶口输出”(打印机不打印,程序卡死)。怎么办: 1.在电脑的PCI插槽上插好PCI转并口卡 2.安装PCI转并口卡的驱动程序 3.连接好小票打印机的打印线,并打开打印机的电源开关 4.安装小票打印机的驱动程序,设置打印机...

weixin_34194551的博客 2815

vue热敏打印机_electron + vue项目实现打印小票功能及实现代码

一 需求:公司项目需要通过electron调用系统打印机,实现打印小票的功能。二、分析:electron打印大概有两种:第一种:通过window的webcontent对象,使用此种方式需要单独开出一个打印的窗口,可以将该窗口隐藏,但是通信调用相对复杂。第二种:使用页面的webview元素调用打印,可以将webview隐藏在调用的页面中,通信方式比较简单。两个对象调用打印方法的使用方式都一样。本文是...

weixin_39940913的博客 1709

解决小票打印机EPSONTM-P2.01缺少驱动问题

  在本机测试小票打印机,安装完驱动后,使用USB转并口线连接到电脑,提示缺少epsontm-p2.01驱动,其实这个是误导问题。因为usb是虚拟出来的并口,方法如下: 第一步:添加打印机 第二步:   第三步:很关键         第四步:选择你对应的打印机型号即可。   ...

sjj5395426的专栏 7784

小票打印机和windows的COM开发(转http://yuqilin1012.blog.163.com/blog/static/81148017200877104041587/)

小票打印机和windows的COM开发<br />默认分类2008-08-07 10:40:41阅读44评论0  字号:大中小 订阅首先, 谈一下打印机硬件<br />最为经典的小票打印机, epsonTM系列: <br /><br /><br /><br />爱普生TM-T58参数<br />基本参数设计类型行式热敏打印分 辨 率360dpi<br />打印性能打印速度100毫米/秒打印字体12×24(ANK)/ 24*24(Chinese)接口类型RS-232,Bi-directional parall

fjfdszj的专栏 2249
上一篇: (转)SQL Server死锁总结
下一篇: (转)在服务器上安装360安全卫士的“血泪史”
boby16
博客等级 码龄21年 18粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值