关于javaweb项目,58热敏打印机打印小票的问题

dooho 2018-08-31 11:08:37
问题:
电脑是win10,装了tomcat、mysql,系统部署在这个电脑里了。打印小票的打印机是直接用线连着这台电脑的,设置过tomcat,打印功能都可以用。
现在,在百度云上租了一台服务器(虚拟机),把项目部署上去后,我觉得打印功能应该是废了,我不可能把打印机连在现在的这台服务器上。
我想知道,现在的超市啊、餐饮店等等,他们打印小票的功能是怎么实现的?他们使用的管理系统是部署在自己的电脑上,然后这个电脑直接连着打印机吗?
如果每个店铺都部署一套系统的话,如果有很多分店,这么多店铺的数据怎么一起统计的呢?

目前功能实现方法:
是这样,给家里做了一个收费的小管理系统,有个功能是用户消费后,页面上点击打印按钮,打印出来此次消费信息的小票。
这个功能呢,我就是写了两个类:一个继承了java.awt.print.Printable,也就是小票的布局类;另外一个就是工具类,这个工具类就一个打印方法。写完这两个类后,调用这个工具类就ok。
package com.dirolep.DTO;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import java.awt.*;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.math.BigDecimal;

/**
*
* Created by xieyao on 2018/8/3.
*/
@Component
@Data
@ConfigurationProperties
@PropertySource("classpath:config/dirolep.properties")
public class BaseTicket implements Printable {

@Value("${dirolep.adress}")
String adress;
@Value("${dirolep.phoneNum}")
String phoneNum;
@Value("${dirolep.consumptionCaregory}")
String consumptionCaregory;

Font font;
String danjuhao; // 单据号
String cardCaregory; // 卡类
String realName; // 真实姓名
String phone; // 会员联系电话
String cardNum; // 会员卡号
String makeCardTime; // 开卡日期
BigDecimal xfNum; // 消费次数
String shengyuNum; // 剩余次数
String personRealName; // 会员姓名
String makeCardDate; // 开卡日期
Integer level; //
String xfDate; // 消费时间

@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
return 0;
}
}

package com.dirolep.DTO;

import java.awt.*;
import java.awt.print.PageFormat;
import java.awt.print.PrinterException;

/**
* 打印消费票据的布局类
* Created by Administrator on 2018\5\1 0001.
*/
public class SalesTicket extends BaseTicket {



@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
Component c = null;
// 转换成Graphics2D 拿到画笔
Graphics2D g2 = (Graphics2D) graphics;
// 设置打印颜色为黑色
g2.setColor(Color.black);

// 打印起点坐标
double x = pageFormat.getImageableX();
double y = pageFormat.getImageableY();

// 设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)
font = new Font("宋体", Font.PLAIN, 14);
g2.setFont(font);// 设置字体
float heigth = font.getSize2D();// 字体高度
// 标题
g2.drawString("迪乐尼婴童游泳馆", (float) x, (float) y + heigth);

float line = 2 * heigth;
font = new Font("宋体", Font.PLAIN, 8);
g2.setFont(font);// 设置字体
heigth = font.getSize2D();// 字体高度

// 显示单据号
line += heigth;
g2.drawString("单据号:" + danjuhao, (float) x, (float) y + line);
// 显示地址
line += heigth;
g2.drawString("门店地址:" + adress, (float) x, (float) y + line);
// 显示电话
line += heigth;
g2.drawString("联系电话:" + phoneNum, (float) x, (float) y + line);
line += heigth;
g2.drawString("卡类:" + cardCaregory, (float) x, (float) y + line);
// 显示消费情况
line += heigth;
g2.drawString("消费项目" + consumptionCaregory, (float) x, (float) y + line);
line += heigth;
g2.drawString("扣除(次):" + xfNum.toString(), (float) x + 25, (float) y + line);
line += heigth;
g2.drawString("剩余(次):" + shengyuNum, (float) x + 25, (float) y + line);
// 会员信息
line += heigth;
g2.drawString("会员卡号:" + cardNum, (float) x, (float) y + line);
line += heigth;
g2.drawString("会员姓名::" + personRealName, (float) x, (float) y + line);
line += heigth;
g2.drawString("消费时间:" + xfDate, (float) x, (float) y + line);
line += heigth;
g2.drawString("开卡日期:" + makeCardDate, (float) x, (float) y + line);

line += heigth;
g2.drawString("敬请保留本小票", (float) x + 20, (float) y + line);

switch (pageIndex) {
case 0:
return PAGE_EXISTS;
default:
return NO_SUCH_PAGE;

}
}
}

package com.dirolep.Utils;

import com.dirolep.DTO.BaseTicket;
import java.awt.print.*;

/**
* 打印票据工具类
* Created by Administrator on 2018\5\1 0001.
*/
public class PrintSalesTicket {

public static void PrintSale(BaseTicket ticket) throws PrinterException {
// 通俗理解就是书、文档
Book book = new Book();
// 设置成竖打
PageFormat pf = new PageFormat();
pf.setOrientation(PageFormat.PORTRAIT);

// 通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。
Paper paper = new Paper();
paper.setSize(58, 30000);// 纸张大小
paper.setImageableArea(0, 0, 58, 30000);// A4(595 X
// 842)设置打印区域,其实0,0应该是72,72,因为A4纸的默认X,Y边距是72
pf.setPaper(paper);
book.append(ticket, pf);

// 获取打印服务对象
PrinterJob job = PrinterJob.getPrinterJob();
// 设置打印类
job.setPageable(book);

job.print();

}


}


...全文
242 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧