打印小票是我们软件中常用功能,下面简单演示用Java实现打印小票
package com.Hu.Printer;
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.util.HashMap;
import java.util.Map;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashAttributeSet;
import javax.print.attribute.standard.PrinterName;
/**
* 定义我的打印工具类
* 实现java.awt.print.Printable接口
* */
public class Printer implements Printable {
/**
* 存放要打印的数据的变量,类型可以根据自身需要,此处用map演示
* */
private Map<String, String> contentMap;
/**
* 用有参构造传递参数
* */
public Printer(Map<String, String> map) {
this.contentMap = map;
}
/**
* 具体的实现打印
* */
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
if (pageIndex > 0) {
return NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D) graphics;//画笔工具
Font titleFont = new Font("Default", Font.BOLD, 16);//设置字体样式
Font textFont = new Font("Default", Font.PLAIN, 14);//设置字体样式
g2d.setFont(titleFont);
g2d.drawString(contentMap.get("title"), 80,20);
g2d.setFont(textFont);
g2d.drawString(contentMap.get("text1"), 60,50);
g2d.drawString(contentMap.get("text2"), 60,70);
g2d.drawString(contentMap.get("text3"), 60,90);
g2d.drawString(contentMap.get("text4"), 60,110);
return PAGE_EXISTS;
}
/**
* 测试打印
* */
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("title", "静夜思");
map.put("text1", "窗前明月光,");
map.put("text2", "疑是地上霜。");
map.put("text3", "举头望明月,");
map.put("text4", "低头思故乡。");
Book book = new Book(); //空白页面
PageFormat pf = new PageFormat(); //页面格式
pf.setOrientation(PageFormat.PORTRAIT);
Paper p = new Paper();//打印区域
p.setSize(230, 400);
p.setImageableArea(5, -20, 230, 530);
pf.setPaper(p);
book.append(new Printer(map), pf);
PrinterJob job = PrinterJob.getPrinterJob();
job.setPageable(book);
HashAttributeSet hs = new HashAttributeSet();
String printerName = "XP-80C";//你的小票打印机名称
hs.add(new PrinterName(printerName,null));
PrintService[] pss = PrintServiceLookup.lookupPrintServices(null, hs);//获取系统打印机连接信息
try {
job.setPrintService(pss[0]);//加入打印任务
} catch (PrinterException e) {
e.printStackTrace();
}
try {
job.print();//执行打印,如果要打印多张只需将此方法调几次
} catch (PrinterException e) {
e.printStackTrace();
}
}
}
执行结果如下: