java 获取打印机缺纸_Java怎么实现打印机监控
展开全部
实现目标:
1、可以测试打印32313133353236313431303231363533e58685e5aeb931333363393035机是否连接
2、监控打印机的状态:打印机缺纸、打印机卡纸
我从PrintService里获取PrinterStateReasons,可是总是为空。不知道怎么才能获取到打印机的PrinterStateReasons
Java代码
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.PrintServiceAttributeSet;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.PrinterStateReasons;
import javax.print.event.PrintJobEvent;
import javax.print.event.PrintJobListener;
import javax.print.event.PrintServiceAttributeEvent;
import javax.print.event.PrintServiceAttributeListener;
import com.insigma.afc.common.LogHelper;
public class TextPrinter implements Printable {
private static final LogHelper s_log = new LogHelper(TextPrinter.class);
// 半角下的中文字符
public static final short HALF_CHINESE = 0;
// 半角下的英文字符
public static final short HALF_ENGLISH = 1;
protected String text;
protected String seperator;
public TextPrinter() {
}
public void print(String text, String seperator) {
this.text = text;
this.seperator = seperator;
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new MediaPrintableArea(20, 20, 700, 700, MediaPrintableArea.MM));
PrintService services = PrintServiceLookup.lookupDefaultPrintService();
if (services != null) {
DocPrintJob pj = services.createPrintJob();
services.addPrintServiceAttributeListener(new PrintServiceAttributeListener() {
public void attributeUpdate(PrintServiceAttributeEvent psae) {
PrintServiceAttributeSet attribute = psae.getAttributes();
}
});
pj.addPrintJobListener(new PrintJobListener() {
public void printDataTransferCompleted(PrintJobEvent pje) {
s_log.info("111111111111 " + pje.getPrintEventType());
}
public void printJobCanceled(PrintJobEvent pje) {
s_log.info("22222222222222222 " + pje.getPrintEventType());
}
public void printJobCompleted(PrintJobEvent pje) {
s_log.info("33333333333333 " + pje.getPrintEventType());
}
public void printJobFailed(PrintJobEvent pje) {
s_log.info("444444444444444 " + pje.getPrintEventType());
}
public void printJobNoMoreEvents(PrintJobEvent pje) {
s_log.info("5555555555555555555 " + pje.getPrintEventType());
System.out.println("打印失败:" + pje.JOB_FAILED);
System.out.println("没有事件:" + pje.NO_MORE_EVENTS);
}
public void printJobRequiresAttention(PrintJobEvent pje) {
s_log.info("66666666666666666666 " + pje.getPrintEventType());
}
});
try {
Doc doc = new SimpleDoc(this, flavor, null);
pj.print(doc, aset);
PrinterStateReasons printerStateReasons = services
.getAttribute(PrinterStateReasons.class);
System.out.println("-----------" + printerStateReasons);
} catch (PrintException e) {
e.printStackTrace();
System.err.println(e);
}
} else {
s_log.info("未找到打印机。");
}
}
public int print(Graphics g, PageFormat pf, int pageIndex) {
if (pageIndex == 0) {
Graphics2D g2d = (Graphics2D) g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
g2d.setColor(Color.black);
String[] lines = text.split(seperator);
for (int i = 0; i < lines.length; i++) {
g2d.drawString(lines[i], 0, (i + 1) * 20);
}
return Printable.PAGE_EXISTS;
} else {
return Printable.NO_SUCH_PAGE;
}
}
/**
* 为中文字符对齐补空格(打印对齐时候用)
*
* @param content
* 需要补空格的字符
* @param expectLength
* 占用的最大长度
* @param type
* 字符的类型:中文、英文
* @return
*/
public static String validChineseString(String content, int expectLength, short type) {
String resultString = content.trim();
String space = null;
switch (type) {
case HALF_CHINESE: {
space = " ";
break;
}
case HALF_ENGLISH: {
space = " ";
break;
}
default:
break;
}
int contentLength = content.length();
if (contentLength < expectLength) {
int different = expectLength - contentLength;
for (int i = 0; i < different; i++) {
resultString += space;
}
}
System.out.println(content + " " + resultString);
return resultString;
}
}
本回答由提问者推荐
已赞过
已踩过<
你对这个回答的评价是?
评论
收起
java 获取打印机缺纸_Java怎么实现打印机监控相关推荐
- 【T6】打印总账的时候提示:打印机缺纸(错误号:1001)
[问题现象] 使用畅捷通T6软件的时候, 账簿打印,打印明细账正常:打印总账提示打印机缺纸(错误号:1001). [解决方法] 经过测试,打印报错后, 点击预览,预览中是空白的没有数据. 此时,在查询 ...
- T6账簿打印显示打印机缺纸
问题现象:在打印总账账簿的时候点打印显示打印机缺纸,实际有放纸进去,预览进去空白或者横线 解决方法:打开总账账簿点击表头还原然后再去打印即可,其他账簿如果也出现这个问题到相应的账表中还原一下格式即可.
- html怎么消除打印的进纸,打印机缺纸状态怎么消除?
打印机总是提示缺纸 故障描述:用户最近在使用打印机的时候发现,明明打印机进纸槽中装有不少打印纸张.可是在执行打印操作时,印机控制面板中的缺纸信号灯却总是闪烁. 故障诊断:产生这种故障的原因一般是打印机 ...
- java 获取手机归属地_java 获取手机归属地
java 获取手机归属地 [2021-01-30 20:46:44] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/( ...
- java获取当前日期 星期几_java获取当前日期是星期几的方法
java获取当前日期是星期几的方法 发布时间:2020-06-29 11:16:15 来源:亿速云 阅读:133 作者:Leah 本篇文章为大家展示了java获取当前日期是星期几的方法,代码简明扼要并 ...
- java获取当前年月日历_java万年历,获取该年月日历表
这篇文章主要介绍了java获取对应年月分日历表有需要的朋友可以来参考下 这篇文章应用java技术输入年份和月份获取该年月日历表,下面通过一段代码给大家做展示: 输入年份和月份,打印出这个月的日历表 1 ...
- java 获取下一年_JAVA获取下一年,下个月,下一天;月份为何以0开始?
JAVA获取下一年,下个月,下一天:月份为何以0开始? JAVA获取下一年,下个月,下一天:月份为何以0开始? 活不多说,直接上代码: public static void main(String[] ...
- java 获取gif帧数_Java图片处理之获取gif图一帧图片的两种方法
前言 本文主要给大家介绍了关于Java获取gif图一帧图片的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.Java原生代码实现gif获取一帧图片 先看测试代码: pu ...
- java 获取当前月日_Java获取当前时间年月日的方法
本文实例为大家分享了java获取当前时间年月日的具体代码,供大家参考,具体内容如下 import java.text.ParseException; import java.text.SimpleDa ...
最新文章
- 四:(之六_镜像发布)Dockerfile语法梳理和实践
- 【noqsl】beansdb的分布式实现~简单粗暴有效~
- python 多进程使用总结
- 在.NET Core中使用MySQL5.7的JSON类型字段
- 企业实战(Jenkins+GitLab+SonarQube)_08_jenkins安装和第一个Java项目构建
- Java中的StringBuffer、StringBuilder和包装器类型
- 使用Jupter Notebook实现简单的神经网络
- 复盘!12 小时清掉 3500 份生财日历
- paip.python错误解决8
- AR5B22刷win10的killer驱动
- c语言皮尔森系数程序,皮尔森相关系数(Pearson correlation coefficient)-Go语言中文社区...
- iPhone显示返回的是html界面,iPhone X怎么回到主界面?苹果X返回主页的两种方法...
- 小喇叭上面有红叉,显示未插入扬声器或耳机,电脑没声音
- 二维泊松方程求解--点迭代法
- 基于深度学习下的稳定学习究竟是什么?因果学习?迁移学习?之一
- 由 An Intriguing Failing of Convolutional Neural Networks and the CoordConv Solution 引起的思考
- iOS swift MD5加密
- 【无标题】如何用HTML做出一份简单的问卷调查?
- 从兴电子笔试题目小结
- PMP有效期三年后,还有必要续证吗?详细续证流程PDU积攒方法
热门文章
- 微信小程序元素定位查找
- android app 手机号码,android 安卓APP获取手机设备信息和手机号码的代码示例
- Python 使用matplotlib模块连续显示图片
- 生发Rogaine了解下
- iptables防止nmap扫描以及binlog
- java 时间字符串 转换_java实现时间与字符串之间转换
- 手机存量时代,互相拉踩是必修课
- java操作jedis_Redis教程 —— Java池化JedisPool操作Jedis
- 中控技术:5T技术融合实现工业3.0到工业4.0的转变
- 6-8 统计各位数字之和是5的数 (20 分)