直接上代码

参考:java 实现58热敏票据打印 如有侵权,请联系QQ 1450648869

package com.example.demo.print;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;public class Print implements Printable{private static String TITLE;//标题private static String ORDERNO;//单号private static String STORENAME;//门店private static String CASHIER;//收银员private static String INTEGRAL;//总积分private static String CASH;//总现金private static String PAYMENT;//支付方式private static String USERNAME;//会员名称private static String TEL;//客服电话private static String ADDRESS;//地址private static List<Integral> GOODSARRAY;/*public static void main(String[] args) {String[] goodsList = {"菠萝,1,5,1.00","桂圆,2,10.,1.00","亿魅佳冬季送妈妈保暖雪地靴 注:37码三双,棕色、黑色、咖啡色。36/2棕色、咖啡色。,1,10000,0.00","桂圆,2,10,0.00","桂圆,2,10,0.00","桂圆,2,10,0.00","桂圆,2,10,0.00","桂圆,2,10,0.00","桂圆,2,10,0.00","桂圆,2,10,1.00"};printSheet("igo123456585","歇台子店","1001","支付宝","15683199978","400-58985652","九龙坡区渝州路歇台子双薪时代-嗨兑超市", goodsList);}*/private static void chushihua(String orderNo, String storeName, String cashier, String integral, String cash, String payment, String userName, String tel, String address,List<Integral> goodsArray){TITLE ="收银小票";ORDERNO =orderNo;STORENAME =storeName;CASHIER =cashier;INTEGRAL =integral;CASH =cash;PAYMENT =payment;USERNAME =userName;TEL =tel;ADDRESS =address;GOODSARRAY =goodsArray;}/*** 用于将商品零售进行进行打印*/public static void printSheet(String orderNo, String storeName, String cashier, String integral, String cash, String payment, String userName, String tel, String address, List<Integral> integrals) {chushihua(orderNo,storeName, cashier, integral, cash, payment, userName, tel, address, integrals);// 通俗理解就是书、文档Book book = new Book();// 设置成竖打PageFormat pf = new PageFormat();pf.setOrientation(PageFormat.PORTRAIT); //LANDSCAPE表示横打;PORTRAIT表示竖打;REVERSE_LANDSCAPE表示打印空白// 通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。Paper p = new Paper();int length = printSize(GOODSARRAY);//加值参数为115,增加行数需要增加高度System.out.println("Paper length is:"+length);p.setSize(165, length); // 纸张大小A4纸(595, 842),经测试58mm为165p.setImageableArea(5, 5, 155, length); //设置打印区域,A4纸的默认X,Y边距是72//x - 用来设置此 paper 可成像区域左上角的 x 坐标//y - 用来设置此 paper 可成像区域左上角的 y 坐标//width - 用来设置此 paper 可成像区域宽度的值//height - 用来设置此 paper 可成像区域高度的值pf.setPaper(p);// 把 PageFormat 和 Printable 添加到书中,组成一个页面book.append(new Print(), pf);// 获取打印服务对象PrinterJob job = PrinterJob.getPrinterJob();// 设置打印类job.setPageable(book);try {// // 可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印// boolean a = job.printDialog();// if (a) {job.print();// }} catch (PrinterException e) {e.printStackTrace();}}public static Integer printSize(List<Integral> goodsArray) {int height = 200;//加值参数为140,增加行数需要增加高度if (goodsArray.size() > 0) {height += goodsArray.size()*10;for(int i=0;i<goodsArray.size();i++){goodsArray.get(i).getGoods_name();//String[] goods = goodsArray[i].split(",");if(goodsArray.get(i).getGoods_name().length()>8){//名称超11个字,换行height += 10;}}}return height;}@Overridepublic int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {try {/*** * @param Graphic指明打印的图形环境* PageFormat指明打印页格式(页面大小以点为计量单位,* 1点为1英寸的1/72,1英寸为25.4毫米。A4纸大致为595×842点) ** @param pageIndex指明页号**/// 转换成Graphics2DGraphics2D g2d = (Graphics2D) graphics;// 设置打印颜色为黑色g2d.setColor(Color.black);// 打印起点坐标switch (pageIndex) {case 0:String xuxian = "------------------------------------";double x = pageFormat.getImageableX();double y = pageFormat.getImageableY() + 10;//设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)Font fontTitle = new Font("新宋体", Font.BOLD, 10);g2d.setFont(fontTitle); // 设置字体//打印标题g2d.drawString(TITLE, (float) x + 40, (float) y);y += fontTitle.getSize2D()+4;Font fontContent = new Font("新宋体", Font.PLAIN, 7);g2d.setFont(fontContent); //设置字体//打印 订单号g2d.drawString("单号:" + ORDERNO, (float) x, (float) y);y += fontContent.getSize2D()+4;g2d.drawString("门店:" + STORENAME, (float) x, (float) y);y += fontContent.getSize2D()+4;g2d.drawString("收银员:" +CASHIER, (float) x, (float) y);y += fontContent.getSize2D()+4;SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");g2d.drawString("时间:" + format.format(new Date()), (float) x, (float) y);y += fontContent.getSize2D()+4;g2d.drawString(xuxian, (float) x, (float) y);y += fontContent.getSize2D()+2;g2d.drawString("名称", (float) x, (float) y);g2d.drawString("数", (float) x + 70, (float) y);g2d.drawString("积分单", (float) x + 80, (float) y);g2d.drawString("现金单", (float) x + 110, (float) y);y += fontContent.getSize2D()+2;g2d.drawString("量", (float) x + 70, (float) y);g2d.drawString("价", (float) x + 80, (float) y);g2d.drawString("价", (float) x + 110, (float) y);y += fontContent.getSize2D()+2;Double totalCount = 0.0,totalPrice = 0.0 ;for(int i=0;i<GOODSARRAY.size();i++){//String[] goods = GOODSARRAY[i].split(",");totalCount += Double.valueOf(GOODSARRAY.get(i).getCount());//totalPrice += Double.valueOf(GOODSARRAY.get(i).getCount())*Double.valueOf(GOODSARRAY.get(i).get);String goodsName = GOODSARRAY.get(i).getGoods_name().length()>8?GOODSARRAY.get(i).getGoods_name().substring(0, 8):GOODSARRAY.get(i).getGoods_name();g2d.drawString((i+1) + "." + goodsName, (float) x, (float) y);if(GOODSARRAY.get(i).getGoods_name().length()>8){//名称超8个字,换行y += fontContent.getSize2D()+2;g2d.drawString(GOODSARRAY.get(i).getGoods_name().substring(8), (float) x+7, (float) y);}if(GOODSARRAY.get(i).getGoods_name().length()>20){y += fontContent.getSize2D()+2;}g2d.drawString(GOODSARRAY.get(i).getCount().toString(), (float) x + 70, (float) y);g2d.drawString(GOODSARRAY.get(i).getJifen().toString(), (float) x + 80, (float) y);g2d.drawString(GOODSARRAY.get(i).getCash().toString(), (float) x + 110, (float) y);y += fontContent.getSize2D()+2;}g2d.drawString(xuxian, (float) x, (float) y);y += fontContent.getSize2D()+2;g2d.drawString("件数:"+totalCount, (float) x , (float) y);y += fontContent.getSize2D()+2;
//                  g2d.drawString("积分总计:"+ String.format("%.2f",Double.valueOf(INTEGRAL)), (float) x ,(float) y);g2d.drawString("积分总计:"+ INTEGRAL, (float) x ,(float) y);y += fontContent.getSize2D()+2;
//                  g2d.drawString("现金总计:"+ String.format("%.2f",Double.valueOf(CASH)), (float) x, (float) y);g2d.drawString("现金总计:"+ CASH, (float) x, (float) y);y += fontContent.getSize2D()+2;g2d.drawString("支付方式:"+ PAYMENT, (float) x, (float) y);y += fontContent.getSize2D()+2;g2d.drawString("会员 名称:"+ USERNAME, (float) x, (float) y);y += fontContent.getSize2D()+2;g2d.drawString(xuxian, (float) x, (float) y);y += fontContent.getSize2D()+4;String address = ADDRESS.length()>16?ADDRESS.substring(0,16):ADDRESS;g2d.drawString("地址:" + address, (float) x, (float) y);if(ADDRESS.length()>16){y += fontContent.getSize2D()+2;g2d.drawString(ADDRESS.substring(16), (float) x+20, (float) y);}y += fontContent.getSize2D()+2;g2d.drawString("谢谢惠顾期待您的再次光临", (float) x+22, (float) y);y += fontContent.getSize2D()+2;g2d.drawString("客服电话("+TEL+")", (float) x+25, (float) y);y += fontContent.getSize2D()+10;return PAGE_EXISTS;default:return NO_SUCH_PAGE;}} catch (Exception e) {e.printStackTrace();}return 0;}}
package com.example.demo.print;public class Integral {private String goods_name;private String count;private String jifen;private String cash;public Integral(){}public Integral(String goodsName,String count,String jifen,String cash){this.goods_name = goodsName;this.count = count;this.jifen = jifen;this.cash = cash;}public String getGoods_name() {return goods_name;}public void setGoods_name(String goods_name) {this.goods_name = goods_name;}public String getCount() {return count;}public void setCount(String count) {this.count = count;}public String getJifen() {return jifen;}public void setJifen(String jifen) {this.jifen = jifen;}public String getCash() {return cash;}public void setCash(String cash) {this.cash = cash;}}
package com.example.demo.print;import java.util.ArrayList;
import java.util.List;public class PrintTest {public static void main(String[] args) {// TODO Auto-generated method stubList<Integral> list = new ArrayList<>();Integral integral = new Integral("菠萝","10","108.0","boluo_cash");list.add(integral);Print.printSheet("1", "abc", "cashier", "integral", "cash", "baidu", "zhangsan", "18888888888", "beijing", list);}}

java 调用 默认打印机 打印小票相关推荐

  1. java调用默认打印机打印发货标签

    效果: 实现:主入口 public static void main(String[] args) {//获取默认的打印机PrintService defaultPrint = PrintServic ...

  2. java调用默认打印机,打印小票(80mm)

    一.默认打印机工具类 package vpos.zs.print;import net.sf.json.JSONObject;import java.util.Map; import java.uti ...

  3. NWJS(NodeJS)调用打印机 - 打印小票

    1 背景 架构设计:VueJS + Spring Cloud微服务架构 功能要求: 调用小票打印机打印小票,功能和超市收银结算功能相同 使用NWJS包装VueJS前端代码实现exe安装包和可执行文件 ...

  4. JAVA连接打印机打印小票、产品信息。标签打印机

    2018年写了一个标签打印机(TSC TX600),标签打印程序,实现功能是通过串口读出设备ID生成二维码和设备信息,用于esp8266 smart config配网.源码和资料:https://do ...

  5. C#调用系统默认打印机打印文字和图片

    本方法适用于有打印驱动的打印机打印.直接用电脑默认打印机进行打印文字和图片. 首先安装打印机驱动,然后在设备和打印机中将要用的打印机设为默认打印机,然后调用该方法即可 Pulic Void Print ...

  6. Java调用TSC打印机进行打印

    最近项目中用到了打印机,最开始的完全不懂,现在弄好了,所以做了总结,该篇包括后台的调用打印(两种方式)跟前端的js的打印,但是只有IE现在支持打印,而且如果想远程连接打印机,二维码的生成和直接由打印机 ...

  7. 自己整理出来的java实现打印机打印小票

    //实现Printable接口 用于创建打印内容 public class UserTicket implements Printable {private String name1;private ...

  8. 记一次Electron 桌面应用实现调用打印机打印小票功能

    项目背景 实现一款交互屏桌面应用软件,类似医院那张种给用户操作办理业务的应用程序.操作业务中在充值后可供用户打印小票. 开发框架:electron-vue vue版本:v2.6.14 electron ...

  9. JAVA调用TSC打印机打印标签(二维码,数据等)超详细!!

    本文打印机型号: TSC MA3400P 后端调用tsc打印机是通过DLL来进行调用的,首先你需要两个TSC文件直接复制到项目目录下边即可 可以直接去官网下载:https://www.chinatsc ...

最新文章

  1. uva 10491 Cows and Cars
  2. linux用户及用户权限管理,Linux用户用户组及权限管理
  3. [git]通过commit_id找回文件
  4. UOJ #164 [清华集训2015]V (线段树)
  5. 丁丁打折网卷能用吗_跳槽频繁的人能用吗?
  6. latex安装包_LaTeX排版入门须知
  7. 数据结结构学习 ---赫夫曼树
  8. 一个 redis 异常访问引发 oom 的案例分析
  9. AssionShop开源B2C电子商务系统-概述(转载)
  10. java导论pdf下载,操作系统导论 PDF 下载
  11. dependency-track 初始化源码解析
  12. 粉笔计算机基础知识,计算机基础知识2-实作.ppt
  13. 思科实验3.数据链路层:生成树配置
  14. 20121214收藏
  15. 王之泰/王志成《面向对象程序设计(java)》第十一周学习总结
  16. EXCEL数据有效性的多级联动
  17. ACL访问控制(华为)
  18. mysql 从库跳过1062_3分钟解决MySQL 1062 主从错误
  19. 在痛苦的日子里笑出声来
  20. uni-app支付宝小程序map地图组件基础操作+画多边形+打点连线

热门文章

  1. 探究pytorch model.eval()测试效果远差于model.train()
  2. 【VUE】vue+vue-cropper实现上传剪裁图片
  3. 程序猿小哥用12万行代码堆出来个「蔡徐坤」!编译竟然还能通过
  4. 重装系统计算机无法启动,重装系统电脑无法开机怎么办?重装系统后电脑无法开机常见故障...
  5. 1+xweb初级试题及笔记
  6. STM32移植到GD32的问题---20170923
  7. 2020年全新开放式学习资源
  8. Kotlin -by 详解
  9. 唐端荣|DSP投放引擎的设计与实现
  10. Anaconda 安装错误的解决办法