Java编程打印购物小票实现代码
短信预约 -IT技能 免费直播动态提醒
简单介绍运行环境:
语言:Java
工具:eclipse
系统:Windows7
(打印设备暂时没有,所以只能提供预览图)
最近,项目需要为商城做一个购物小票的打印功能,日常我们去超市买东西,结账的时候收银员都会打印一个小票,一般的商城也都需要这样的一个小功能,本文给出的 demo 是在 58mm 的热敏打印机下的例子,如果是其他纸张类型的打印机,调整纸张宽度即可。
package test;import java.awt.*;import java.awt.print.*;public class PrintTest {public static void main(String[] args){if(PrinterJob.lookupPrintServices().length>0){PageFormat pageFormat = new PageFormat();//设置打印起点从左上角开始,从左到右,从上到下打印pageFormat.setOrientation(PageFormat.PORTRAIT);Paper paper = new Paper();//设置打印宽度(固定,和具体的打印机有关)和高度(跟实际打印内容的多少有关)paper.setSize(140, 450);//设置打印区域 打印起点坐标、打印的宽度和高度paper.setImageableArea(0, 0, 135, 450);pageFormat.setPaper(paper);//创建打印文档Book book = new Book();book.append(new Printable() {@Override public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {if(pageIndex>0){return NO_SUCH_PAGE;}Graphics2D graphics2D = (Graphics2D) graphics;Font font = new Font("宋体", Font.PLAIN, 5);graphics2D.setFont(font);drawString(graphics2D, "//////////////////////////////", 10, 17, 119, 8);font = new Font("宋体", Font.PLAIN, 7);graphics2D.setFont(font);int yIndex = 30;int lineHeight = 10;int lineWidth = 120;Color defaultColor = graphics2D.getColor();Color grey = new Color(145, 145, 145);//收货信息yIndex = drawString(graphics2D, "收货人:路人甲", 10, yIndex, lineWidth, lineHeight);yIndex = drawString(graphics2D, "收货地址:北京市海淀区上地十街10号百度大厦", 10, yIndex + lineHeight, lineWidth, lineHeight);//收货信息边框Stroke stroke = new BasicStroke(0.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL,0,new float[]{4, 4},0);graphics2D.setStroke(stroke);graphics2D.drawRect(5, 10, 129, yIndex);//药店名称lineWidth = 129;lineHeight = 8;graphics2D.setFont(new Font("宋体", Font.BOLD, 8));graphics2D.setColor(defaultColor);yIndex = drawString(graphics2D, "北京药店零售小票", 5, yIndex + lineHeight + 20, lineWidth, 12);graphics2D.setFont(new Font("宋体", Font.PLAIN, 6));graphics2D.setColor(grey);yIndex = drawString(graphics2D, "操作员:小清新", 5, yIndex + lineHeight + 2, lineWidth, lineHeight);yIndex = drawString(graphics2D, "日期:2017-01-05", 5 + lineWidth/2, yIndex, lineWidth, lineHeight);yIndex = drawString(graphics2D, "品名", 5, yIndex + lineHeight * 2 - 5, lineWidth, lineHeight);yIndex = drawString(graphics2D, "规格", (lineWidth/10)*4, yIndex, lineWidth, lineHeight);yIndex = drawString(graphics2D, "单价", (lineWidth/10)*8, yIndex, lineWidth, lineHeight);yIndex = drawString(graphics2D, "数量", (lineWidth/10)*10, yIndex, lineWidth, lineHeight);for (int i=0; i<5; i++){graphics2D.setFont(new Font("宋体", Font.PLAIN, 7));yIndex = drawString(graphics2D, "E复合维生素B片100片E复合维生素B片100片", 5, yIndex + 15, (lineWidth/10)*7, 10);graphics2D.setFont(new Font("宋体", Font.PLAIN, 6));graphics2D.setColor(grey);yIndex = drawString(graphics2D, "100片/盒", 5, yIndex + 11, lineWidth, lineHeight);yIndex = drawString(graphics2D, "14.50", (lineWidth/10)*8, yIndex, lineWidth, lineHeight);yIndex = drawString(graphics2D, "2", (lineWidth/10)*10, yIndex, lineWidth, lineHeight);graphics2D.setFont(new Font("宋体", Font.PLAIN, 7));yIndex = yIndex + 2;graphics2D.drawLine(5, yIndex, 5 + lineWidth, yIndex);}graphics2D.setColor(defaultColor);yIndex = drawString(graphics2D, "会员名称:小清新", 5, yIndex + lineHeight * 2, lineWidth, lineHeight);yIndex = drawString(graphics2D, "总 数:6", 5, yIndex + lineHeight, lineWidth, lineHeight);yIndex = drawString(graphics2D, "总 计:55.30", 5, yIndex + lineHeight, lineWidth, lineHeight);yIndex = drawString(graphics2D, "收 款:100.00", 5, yIndex + lineHeight, lineWidth, lineHeight);yIndex = drawString(graphics2D, "找 零:44.70", 5, yIndex + lineHeight, lineWidth, lineHeight);graphics2D.setFont(new Font("宋体", Font.PLAIN, 6));graphics2D.setColor(grey);yIndex = drawString(graphics2D, "电话:020-123456", 5, yIndex + lineHeight * 2, lineWidth, lineHeight);yIndex = drawString(graphics2D, "地址:北京市海淀区上地十街10号百度大厦", 5, yIndex + lineHeight, lineWidth, lineHeight);yIndex = yIndex + 20;graphics2D.drawLine(0, yIndex, 140, yIndex);return PAGE_EXISTS;}}, pageFormat);//获取默认打印机PrinterJob printerJob = PrinterJob.getPrinterJob();printerJob.setPageable(book);try {printerJob.print();}catch (PrinterException e) {e.printStackTrace();System.out.println("打印异常");}} else{System.out.println("没法发现打印机服务");}}private static int drawString(Graphics2D graphics2D, String text, int x, int y, int lineWidth, int lineHeight){FontMetrics fontMetrics = graphics2D.getFontMetrics();if(fontMetrics.stringWidth(text)<lineWidth){graphics2D.drawString(text, x, y);return y;} else{char[] chars = text.toCharArray();int charsWidth = 0;StringBuffer sb = new StringBuffer();for (int i=0; i<chars.length; i++){if((charsWidth + fontMetrics.charWidth(chars[i]))>lineWidth){graphics2D.drawString(sb.toString(), x, y);sb.setLength(0);y = y + lineHeight;charsWidth = fontMetrics.charWidth(chars[i]);sb.append(chars[i]);} else{charsWidth = charsWidth + fontMetrics.charWidth(chars[i]);sb.append(chars[i]);}}if(sb.length()>0){graphics2D.drawString(sb.toString(), x, y);y = y + lineHeight;}return y - lineHeight;}}}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
Java编程打印购物小票实现代码
下载Word文档到电脑,方便收藏和打印~
下载Word文档
猜你喜欢
Java编程打印购物小票实现代码
简单介绍运行环境:语言:Java工具:eclipse系统:Windows7(打印设备暂时没有,所以只能提供预览图)最近,项目需要为商城做一个购物小票的打印功能,日常我们去超市买东西,结账的时候收银员都会打印一个小票,一般的商城也都需要这样的
2023-05-30
Android打印机--小票打印格式及模板设置实例代码
小票打印就是向打印设备发送控制打印格式的指令集,而这些打印格式需要去查询对应打印机的API文档,这里我把常用的api给封装了一下文字对齐方式打印字体大小字体是否加粗打印二维码打印条形码切纸打开钱箱字符串转字节数组字符拼接
PrintForm
2022-06-06
Java编程实现从尾到头打印链表代码实例
问题描述:输入一个链表的头结点,从尾巴到头反过来打印出每个结点的值。首先定义链表结点public class ListNode { int val; ListNode next = null; ListNode(int v
2023-05-31
java实现小游戏编程源代码
这是一个简单的猜数字游戏的 Java 源代码:```import java.util.Scanner;public class GuessingGame {public static void main(String[] args) {Sc
2023-09-22
2024-04-02
2023-09-04
2024-04-02
java web开发之购物车功能实现示例代码
之前没有接触过购物车的东东,也不知道购物车应该怎么做,所以在查询了很多资料,总结一下购物车的功能实现。查询的资料,找到三种方法:1.用cookie实现购物车;2.用session实现购物车;3.用cookie和数据库(购物车信息持久化)实现
2023-05-30
Java编程实现打地鼠文字游戏实例代码
控制台输入数字,与随机数匹配,匹配正确则返回“打中了!”匹配错误则返回“太遗憾!没打中!”package hitmouse; import java.util.Random; import java.util.Scanner; public
2023-05-30
Java编程如何实现打印螺旋矩阵
这篇文章主要介绍了Java编程如何实现打印螺旋矩阵,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,
2023-05-30
Java编程之如何实现双重循环打印图形
这篇文章将为大家详细讲解有关Java编程之如何实现双重循环打印图形,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。双重循环打印顶点在左上的直角三角形:public static void main(Stri
2023-05-30
Java实现猜数字小游戏代码怎么编写
Java实现猜数字小游戏代码怎么编写,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。▲游戏规则:系统随机生成一个范围0——100的数,用户
2023-06-26
2024-04-02
2024-04-02
Java编程实现月食简单代码分享
用java的框架和面板的知识做的一个展示月食过程的小程序。这里的想法就是先把背景设置成黑色,然后画一个黄色的圆作为月亮,接着画一个黑色的圆,将它的y坐标与月亮相同,让这个x不断的自增,(这个x代表的是fillArc()里面的那个其实位置坐标
2023-05-30
Java实现坦克大战小游戏代码如何编写
Java实现坦克大战小游戏代码如何编写,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。小游戏介绍:红色坦克是我们的操纵坦克,黑色是敌人坦克。上下左右键控制坦克移动
2023-06-26
Java多线程编程实现socket通信示例代码
流传于网络上有关Java多线程通信的编程实例有很多,这一篇还算比较不错,代码可用。下面看看具体内容。TCP是Tranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的
2023-05-30
Java编程redisson实现分布式锁代码示例
最近由于工作很忙,很长时间没有更新博客了,今天为大家带来一篇有关Redisson实现分布式锁的文章,好了,不多说了,直接进入主题。1. 可重入锁(Reentrant Lock)Redisson的分布式可重入锁RLock Java对象实现了j
2023-05-31
2024-04-02
Java编程实现NBA赛事接口调用实例代码
第一步:找别人提供的接口,比如在这里我选择的是聚合数据提供的接口第二步:要申请相应的AppKey方可使用,此参数会作为接口的参数调用。第三步:调用别人提供的接口方法代码如下:package juheapi.nba;/** * Created
2023-05-30