关于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();

}


}


...全文
297 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文系统研究了并网虚拟同步发电机(VSG)的自适应惯量阻尼调控策略及其对频率动态响应稳定性的影响,聚焦于VSG在并网工况下的惯量与阻尼协同自适应控制机制。通过构建Simulink仿真模型并结合Matlab代码实现,深入分析VSG的动态特性、有功/无功功率响应及电网频率稳定性,采用根轨迹法评估不同调节系数对系统稳定性的敏感性,揭示其支撑电网频率稳定的能力。研究进一步拓展至微电网黑启动、预同步控制、虚拟阻抗技术以及双机VSG间的功率精确分配等关键应用场景,旨在应对高比例新能源接入带来的系统惯量下降与频率稳定挑战,提升电力系统的韧性与可靠运行水平。; 适合人群:具备电力系统分析、自动控制理论及新能源并网技术背景,熟练掌握Matlab/Simulink仿真工具,从事电气工程、能源互联网、微电网控制等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入探究VSG在并网模式下惯量与阻尼参数的自适应协同调控原理与实现方法;②系统分析VSG控制策略对电网频率动态响应过程的影响规律与稳定边界;③通过仿真实践掌握VSG关键控制参数(如虚拟惯量、阻尼系数)的设计、整定及其对系统性能影响的量化评估;④为微电网的自主黑启动、无缝并网及高渗透率可再生能源系统的频率稳定控制提供先进的技术方案与决策依据。; 阅读建议:建议读者结合文中提供的完整Matlab代码与Simulink模型进行动手仿真实验,重点关注控制策略的模块化设计逻辑、参数动态调整过程与系统整体性能之间的关联,务必结合电力系统小信号稳定性分析理论,深入理解根轨迹、特征值等分析结果所蕴含的物理意义,从而实现从理论到实践的贯通。

81,111

社区成员

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

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