当前位置:文档之家› 使用JAVA打印小票方法

使用JAVA打印小票方法

1.将商品零售的信息打印成小票的形式。

package taiqiu;

import java.awt.BasicStroke;
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.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import entity.taiqiu.KaiTaiMessage;
import entity.taiqiu.ShangPinLingShou;

public class PrintTaiQiuService implements Printable {
private String title;
private List shangPinList;
private String admin = "";
private String danjuh = "";
private String zongJie = "";
private String printType = "";
private KaiTaiMessage jieZhangMessage;

public PrintTaiQiuService() {

}

/* 对应于商品零售的构造方法 */
public PrintTaiQiuService(String title,
List shangPinList, String admin, String danjuh,
String zongjie, String printType) {
this.title = title;
this.shangPinList = shangPinList;
this.admin = admin;
this.danjuh = danjuh;
this.zongJie = zongjie;
this.printType = printType;
}

public PrintTaiQiuService(KaiTaiMessage message, String printType) {
this.jieZhangMessage = message;
this.printType = printType;
}

@Override
public int print(Graphics gra, PageFormat pf, int pageIndex)
throws PrinterException {
try {
/**
* * @param Graphic指明打印的图形环境 * @param
* PageFormat指明打印页格式(页面大小以点为计量单位,1
* 点为1英寸的1/72,1英寸为25.4毫米。A4纸大致为595×842点) * @param pageIndex指明页号
**/

// 转换成Graphics2D
Graphics2D g2_1 = (Graphics2D) gra;
// Graphics2D g2_2 = (Graphics2D) gra;

// 设置打印颜色为黑色
g2_1.setColor(Color.black);
// g2_2.setColor(Color.black);
// 打印起点坐标
switch (pageIndex) {
case 0:
// 设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)
// Java平台所定义的五种字体系列:Serif、SansSerif、Monospaced、Dialog 和
// DialogInput
Font font = new Font("宋体", Font.PLAIN, 14);
Font font2 = new Font("宋体", Font.PLAIN, 9);

g2_1.setFont(font2); // 设置字体
// BasicStroke bs_3=new BasicStroke(0.5f);
float[] dash1 = { 2.0f };
// 设置打印线的属性。
// 1.线宽 2、3、不知道,4、空白的宽度,5、虚线的宽度,6、偏移量
g2_1.setStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER, 2.0f, dash1, 0.0f));

double x = pf.getImageableX();
double y = pf.getImageableY();
float heigth1 = font.getSize2D();
float heigth = font2.getSize2D() + 2; // 字体高度
i

f (printType.equals("shangPinLingShou")) {
/* 如果调用该方法的是要打印"商品零售"的小票的信息,则调用该 方法 */
Date date = new Date();
DateFormat df = DateFormat.getDateTimeInstance();
g2_1.setFont(font); // 设置字体
g2_1.drawString(title, (float) x + 50, (float) y + 1
* heigth1);
g2_1.drawLine((int) x, (int) (y + 2 * heigth1),
(int) x + 180, (int) (y + 2 * heigth1));
g2_1.setFont(font2);
g2_1.drawString("品名:", (float) x, (float) y + 3 * heigth1);
g2_1.setFont(font2); // 设置字体
g2_1.drawString("单价:", (float) x + 60, (float) y + 3
* heigth1);
g2_1.setFont(font2); // 设置字体
g2_1.drawString("数量:", (float) x + 100, (float) y + 3
* heigth1);
g2_1.setFont(font2); // 设置字体
g2_1.drawString("金额:", (float) x + 140, (float) y + 3
* heigth1);
g2_1.setFont(font2); // 设置字体
g2_1.drawLine((int) x - 2, (int) (y + 5 * (heigth - 2)),
(int) x + 183, (int) (y + 5 * (heigth - 2)));

int y1 = 0;
g2_1.setFont(font2);
for (ShangPinLingShou shangPin : shangPinList) {
g2_1.drawString(shangPin.getShangPin_name(), (float) x,
(float) y + ((float) 5.5 + y1) * heigth);
g2_1.drawString(shangPin.getSingle_Price() + "",
(float) x + 60, (float) y + ((float) 5.5 + y1)
* heigth);
g2_1.drawString(shangPin.getShuLiang() + "",
(float) x + 100, (float) y + ((float) 5.5 + y1)
* heigth);
g2_1.drawString(shangPin.getTotalMoney() + "",
(float) x + 140, (float) y + ((float) 5.5 + y1)
* heigth);
y1++;
if (y1 == shangPinList.size()) {
g2_1.drawLine((int) x - 2,
(int) (y + ((float) 5.5 + y1) * heigth),
(int) x + 183,
(int) (y + ((float) 5.5 + y1) * heigth));
y1++;
g2_1.drawString("总金额:" + zongJie, (float) x,
(float) y + ((float) 5.5 + y1) * heigth);
y1++;
g2_1.drawString("收银员:" + admin, (float) x,
(float) y + ((float) 5.5 + y1) * heigth);
y1++;
g2_1.drawString("销售单号:" + danjuh, (float) x,
(float) y + ((float) 5.5 + y1) * heigth);
y1++;
g2_1.drawLine((int) x - 2,
(int) (y + ((float) 5.5 + y1) * heigth),
(int) x + 183,
(int) (y + ((float) 5.5 + y1) * heigth));
y1++;
g2_1.drawString("谢谢惠顾,欢迎再次光临!", (float) x,
(float) y + ((float) 5.5 + y1) * heigth);
y1++;
g2_1.drawString("日期:" + df.format(date), (float) x,
(float) y + ((float) 5.5 + y1) * heigth);
}

}
}
if (printType.equals("jiezhanglist")) {
/* 如果调用方法的是 要打印桌台结账时的小票信息时,则调用该 方法 */
g2_1.setFont(font); // 设置字体
g2_1.drawString("

桌台结账", (float) x + 50, (float) y + 1
* heigth1);
g2_1.drawLine((int) x, (int) (y + 2 * heigth1),
(int) x + 180, (int) (y + 2 * heigth1));
g2_1.setFont(font2);
g2_1.drawString("类别:", (float) x, (float) y + 3 * heigth1);

g2_1.setFont(font2); // 设置字体
g2_1.drawString("金额:", (float) x + 100, (float) y + 3
* heigth1);

g2_1.setFont(font2); // 设置字体
g2_1.drawLine((int) x - 2, (int) (y + 5 * (heigth - 2)),
(int) x + 183, (int) (y + 5 * (heigth - 2)));

int y1 = 0;
g2_1.setFont(font2);
g2_1.drawString("桌台号:", (float) x, (float) y
+ ((float) 5.5 + y1) * heigth);
g2_1.drawString(jieZhangMessage.getTableNum() + "("
+ jieZhangMessage.getTableType() + ")",
(float) x + 100, (float) y + ((float) 5.5 + y1)
* heigth);
y1++;

g2_1.drawString("桌台费:", (float) x, (float) y
+ ((float) 5.5 + y1) * heigth);
g2_1.drawString(jieZhangMessage.getTableMoney() + "",
(float) x + 100, (float) y + ((float) 5.5 + y1)
* heigth);
y1++;
g2_1.drawString("商品费:", (float) x, (float) y
+ ((float) 5.5 + y1) * heigth);
g2_1.drawString(jieZhangMessage.getShangpinmoney() + "",
(float) x + 100, (float) y + ((float) 5.5 + y1)
* heigth);
y1++;
g2_1.drawString("出租费:", (float) x, (float) y
+ ((float) 5.5 + y1) * heigth);
g2_1.drawString(jieZhangMessage.getChuzumoney() + "",
(float) x + 100, (float) y + ((float) 5.5 + y1)
* heigth);
y1++;
g2_1.drawString("陪打费:", (float) x, (float) y
+ ((float) 5.5 + y1) * heigth);
g2_1.drawString(jieZhangMessage.getPeidamoney() + "",
(float) x + 100, (float) y + ((float) 5.5 + y1)
* heigth);
y1++;
g2_1.drawString("并入台费:", (float) x, (float) y
+ ((float) 5.5 + y1) * heigth);
g2_1.drawString(jieZhangMessage.getBingrumoney() + "",
(float) x + 100, (float) y + ((float) 5.5 + y1)
* heigth);
y1++;
g2_1.drawLine((int) x - 2, (int) (y + ((float) 5.5 + y1)
* heigth), (int) x + 183,
(int) (y + ((float) 5.5 + y1) * heigth));
y1++;
g2_1.drawString("总费用:", (float) x, (float) y
+ ((float) 5.5 + y1) * heigth);
g2_1.drawString(jieZhangMessage.getTotalmoney() + "",
(float) x + 100, (float) y + ((float) 5.5 + y1)
* heigth);
y1++;
g2_1.drawString("应收金额:", (float) x, (float) y
+ ((float) 5.5 + y1) * heigth);
g2_1.drawString(jieZhangMessage.getYingshoumoney() + "",
(float) x + 100, (float) y + ((float) 5.5 + y1)
* heigth);
y1++;
g2_1.drawString("实收金额:", (float) x, (float) y
+ ((float) 5.5 + y1) * heigth);
g2_1.drawString(jieZhangMessage.getShishoumoney() + "",
(float) x + 100

, (float) y + ((float) 5.5 + y1)
* heigth);
y1++;

g2_1.drawLine((int) x - 2, (int) (y + ((float) 5.5 + y1)
* heigth), (int) x + 183,
(int) (y + ((float) 5.5 + y1) * heigth));

y1++;
g2_1.drawString("小票号:", (float) x, (float) y
+ ((float) 5.5 + y1) * heigth);
g2_1.drawString(jieZhangMessage.getOddNumber(),
(float) x + 100, (float) y + ((float) 5.5 + y1)
* heigth);
y1++;
g2_1.drawString("开台时间:", (float) x, (float) y
+ ((float) 5.5 + y1) * heigth);
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
g2_1.drawString(sdf.format(jieZhangMessage.getStartTime()),
(float) x + 100, (float) y + ((float) 5.5 + y1)
* heigth);
y1++;
g2_1.drawString("结束时间:", (float) x, (float) y
+ ((float) 5.5 + y1) * heigth);
g2_1.drawString(jieZhangMessage.getEndTime() + "",
(float) x + 100, (float) y + ((float) 5.5 + y1)
* heigth);
y1++;
g2_1.drawString("消费时长:", (float) x, (float) y
+ ((float) 5.5 + y1) * heigth);
g2_1.drawString(jieZhangMessage.getTotalTime(),
(float) x + 100, (float) y + ((float) 5.5 + y1)
* heigth);
y1++;
g2_1.drawLine((int) x - 2, (int) (y + ((float) 5.5 + y1)
* heigth), (int) x + 183,
(int) (y + ((float) 5.5 + y1) * heigth));
y1++;
g2_1.drawString("谢谢惠顾,欢迎再次光临!", (float) x, (float) y
+ ((float) 5.5 + y1) * heigth);
y1++;
Date date = new Date();
DateFormat df = DateFormat.getDateTimeInstance();
g2_1.drawString("日期:" + df.format(date), (float) x,
(float) y + ((float) 5.5 + y1) * heigth);

}

return PAGE_EXISTS;
default:
return NO_SUCH_PAGE;
}
} catch (Exception e) {
e.printStackTrace();
}

return 0;
}

/**
* 用于将商品零售进行进行打印
*
* @param title
* @param shangPin
* @param admin
* @param danjuh
* @param zongjie
* @param type
*/
public void print(String title, List shangPin,
String admin, String danjuh, String zongjie, String type) {
// 通俗理解就是书、文档
Book book = new Book();
// 设置成竖打
PageFormat pf = new PageFormat();
pf.setOrientation(PageFormat.PORTRAIT); // LANDSCAPE表示竖打;PORTRAIT表示横打;REVERSE_LANDSCAPE表示打印空白
// 通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。
Paper p = new Paper();

int length = printSize(shangPin);
p.setSize(200, length); // 纸张大小(590, 840)表示A4纸
p.setImageableArea(10, 10, 227, length); // A4(595 X
// 842)设置打印区域,其实0,0应该是72,72
// ,因为A4纸的默认X,Y边距是72

pf.setPaper(p);
// // 把 PageFormat 和 Printable 添加到书中,组成一个页


book.append(new PrintTaiQiuService(title, shangPin, admin, danjuh,
zongjie, type), pf);
// // 获取打印服务对象
PrinterJob job = PrinterJob.getPrinterJob();
// // 设置打印类
job.setPageable(book);
try {
// // 可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印
// boolean a = job.printDialog();
// if (a) {
job.print();
} catch (PrinterException e) {
e.printStackTrace();
}
}

public Integer printSize(List shangPinList) {
int k = 15;
if (shangPinList.size() != 0) {
k = k * shangPinList.size();
}
return 160 + k;
}

/**
*用于将结账信息进行打印
*
*/
public void printjieZhang(KaiTaiMessage message, String name) {
// 通俗理解就是书、文档
Book book = new Book();
// 设置成竖打
PageFormat pf = new PageFormat();
pf.setOrientation(PageFormat.PORTRAIT); // LANDSCAPE表示竖打;PORTRAIT表示横打;REVERSE_LANDSCAPE表示打印空白
// 通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。
Paper p = new Paper();

int length = 280;
p.setSize(200, length); // 纸张大小(590, 840)表示A4纸
p.setImageableArea(10, 10, 227, length); // A4(595 X
// 842)设置打印区域,其实0,0应该是72,72
// ,因为A4纸的默认X,Y边距是72

pf.setPaper(p);
// // 把 PageFormat 和 Printable 添加到书中,组成一个页面
book.append(new PrintTaiQiuService(message, name), pf);
// // 获取打印服务对象
PrinterJob job = PrinterJob.getPrinterJob();
// // 设置打印类
job.setPageable(book);
try {
// // 可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印
// boolean a = job.printDialog();
// if (a) {
job.print();
} catch (PrinterException e) {
e.printStackTrace();
}
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public List getShangPinList() {
return shangPinList;
}

public void setShangPinList(List shangPinList) {
this.shangPinList = shangPinList;
}

}

相关主题
文本预览
相关文档 最新文档