简单介绍运行环境:

语言:Java

工具:eclipse

系统:Windows7

(打印设备暂时没有,所以只能提供预览图)

最近,项目需要为商城做一个购物小票的打印功能,日常我们去超市买东西,结账的时候收银员都会打印一个小票,一般的商城也都需要这样的一个小功能,本文给出的 demo 是在 58mm 的热敏打印机下的例子,如果是其他纸张类型的打印机,调整纸张宽度即可。

package test;

import java.awt.*;

import java.awt.print.*;

/**

* 打印机测试类(58mm)

* 1、目标打印机必须设置为默认打印机

* 2、打印页面的宽度和具体的打印机有关,一般为打印纸的宽度,需要配置成系统参数

* 3、一个汉字的宽度大概是12点

*/

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("没法发现打印机服务");

}

}

/**

* 字符串输出

* @param graphics2D 画笔

* @param text 打印文本

* @param x 打印起点 x 坐标

* @param y 打印起点 y 坐标

* @param lineWidth 行宽

* @param lineHeight 行高

* @return 返回终点 y 坐标

*/

private static int drawString(Graphics2D graphics2D, String text, int x, int y, int lineWidth, int lineHeight){

FontMetrics fontMetrics = graphics2D.getFontMetrics();

if(fontMetrics.stringWidth(text)

graphics2D.drawString(text, x, y);

return y;

} else{

char[] chars = text.toCharArray();

int charsWidth = 0;

StringBuffer sb = new StringBuffer();

for (int i=0; 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;

}

}

}

运行结果:

效果预览:

总结

简单说就是编写一段Java程序,将输出结果另存为“ *.xps  ”格式文件,由打印机输出,非常简单。希望对大家有所帮助。如有问题欢迎留言指出。感谢朋友们对本站的支持。

购物小票 java_Java编程打印购物小票实现代码相关推荐

  1. java小票_Java编程打印购物小票实现代码

    简单介绍运行环境: 语言:Java 工具:eclipse 系统:Windows7 (打印设备暂时没有,所以只能提供预览图) 最近,项目需要为商城做一个购物小票的打印功能,日常我们去超市买东西,结账的时 ...

  2. 购物小票 java_Java练习题——打印购物小票

    需求说明: ·结算时打印购物小票 ·计算此次购物获得的会员积分 首先,打开eclipse 右键包,新建一个类 包名自己起,然后点击完成 代码如下: (对于数据类型不了解的童鞋可以看这篇文章:Java教 ...

  3. java打印小票的时间_Java编程打印购物小票实现代码

    这篇文章主要介绍了Java编程打印购物小票实现代码,具有一定参考价值,需要的朋友可以了解下. 简单介绍运行环境: 语言:Java 工具:eclipse 系统:Windows7 (打印设备暂时没有,所以 ...

  4. 收银小票编码生成java_Java练习题——打印购物小票

    需求说明: ·结算时打印购物小票 ·计算此次购物获得的会员积分 首先,打开eclipse 右键包,新建一个类 包名自己起,然后点击完成 代码如下: (对于数据类型不了解的童鞋可以看这篇文章:Java教 ...

  5. java购物小票代码_Java编程打印购物小票实现代码

    简单介绍运行环境: 语言:Java 工具:eclipse 系统:Windows7 (打印设备暂时没有,所以只能提供预览图) 最近,项目需要为商城做一个购物小票的打印功能,日常我们去超市买东西,结账的时 ...

  6. 2021-11-08 打印购物小票

    文章目录 一,打印购物小票 一,打印购物小票 ```python # 输入部分 discount = 0.8 # 8折优惠 price1 = float(input("输入运动衫单价:&qu ...

  7. Python 打印购物小票

    打印购物小票 需求: 指定折扣 输入购买商品单价与数量.顾客交费 结算时打印购物小票,计算此次购物总金额,顾客交费,商店找补,以及购物积分 钱不够时,提醒顾客继续交钱 只给三次交钱机会 "& ...

  8. Python实例1—打印购物小票

    首先录入商品信息,再购买商品,最后打印购物小票 代码: #录入商品信息 name1 = '苹果' num1 = '1001' price1 = 2.5name2 = '香蕉' num2 = '1002 ...

  9. 用python打印购物小票和证书

    目录 1.打印购物小票 2.打印证书 在使用python打印东西时一定要注意到缩进,在python语言中对缩进很重视 input用来接收数据 input后边小括号可以写接受数据的条件 在定义常量或者变 ...

最新文章

  1. oracle 授权 增删改查权限_linux suid,sgid,sticky-bit三种特殊权限简介
  2. LoadRunner模拟Json请求
  3. 自定义ListView【通用】适配器并实现监听控件
  4. 强化学习(五)—— AlphaGo与Alpha Zero
  5. 会php学java入门要多久_php8(java入门要多久)
  6. spring-boot-starter-swagger 1.3.0.RELEASE:新增对JSR-303的支持和host的配置
  7. 【操作系统复习】系统调用
  8. HDU1166 (线段树/修改点,询问区间)
  9. 剑指offer面试题[7]-用两个栈实现队列
  10. 【实验】简单实时300点采样逻辑
  11. spring boot 教程(六)多数据源配置与使用
  12. DataGraph for Mac v4.3.0 强大的统计分析软件
  13. npm下载安装教程_npm下载,安装和使用教程
  14. AT89C51中断模板(宏定义)
  15. Python下十进制转换为二进制
  16. win10任务栏卡死桌面正常的解决方法
  17. 运用百度框架paddle进行手势识别【动手实践,附源码】
  18. excel表格如何把含有数字的单元格筛选出来?
  19. 对于计算机专业的个人理解
  20. Tomcat配置和部署

热门文章

  1. webuploader上传文件夹控件
  2. 深入理解thunk函数
  3. 使用Cocycles按功能查找JavaScript代码段
  4. 同方打造绿色冬奥新体验;安博教育与麒麟软件签署全面合作协议;趣链科技与成都高新区打造链上授权办事服务 | 全球TMT...
  5. 基于Python和Django实现的虚拟网络银行
  6. 免费邮件服务器软件 linux,Linux 快速搭建免费邮件服务器(docker)
  7. java日历事件处理_18个Java8日期处理的实践,太有用了
  8. Failed to execute goal on project ...: Could not resolve dependencies for project ...
  9. 收费企业邮箱注册,大企业邮箱品牌哪家好?如何注册公司邮箱?
  10. 鼠标如何快捷键切换到控制音量