展开全部

实现目标:

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怎么实现打印机监控相关推荐

  1. 【T6】打印总账的时候提示:打印机缺纸(错误号:1001)

    [问题现象] 使用畅捷通T6软件的时候, 账簿打印,打印明细账正常:打印总账提示打印机缺纸(错误号:1001). [解决方法] 经过测试,打印报错后, 点击预览,预览中是空白的没有数据. 此时,在查询 ...

  2. T6账簿打印显示打印机缺纸

    问题现象:在打印总账账簿的时候点打印显示打印机缺纸,实际有放纸进去,预览进去空白或者横线 解决方法:打开总账账簿点击表头还原然后再去打印即可,其他账簿如果也出现这个问题到相应的账表中还原一下格式即可.

  3. html怎么消除打印的进纸,打印机缺纸状态怎么消除?

    打印机总是提示缺纸 故障描述:用户最近在使用打印机的时候发现,明明打印机进纸槽中装有不少打印纸张.可是在执行打印操作时,印机控制面板中的缺纸信号灯却总是闪烁. 故障诊断:产生这种故障的原因一般是打印机 ...

  4. java 获取手机归属地_java 获取手机归属地

    java 获取手机归属地 [2021-01-30 20:46:44]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/( ...

  5. java获取当前日期 星期几_java获取当前日期是星期几的方法

    java获取当前日期是星期几的方法 发布时间:2020-06-29 11:16:15 来源:亿速云 阅读:133 作者:Leah 本篇文章为大家展示了java获取当前日期是星期几的方法,代码简明扼要并 ...

  6. java获取当前年月日历_java万年历,获取该年月日历表

    这篇文章主要介绍了java获取对应年月分日历表有需要的朋友可以来参考下 这篇文章应用java技术输入年份和月份获取该年月日历表,下面通过一段代码给大家做展示: 输入年份和月份,打印出这个月的日历表 1 ...

  7. java 获取下一年_JAVA获取下一年,下个月,下一天;月份为何以0开始?

    JAVA获取下一年,下个月,下一天:月份为何以0开始? JAVA获取下一年,下个月,下一天:月份为何以0开始? 活不多说,直接上代码: public static void main(String[] ...

  8. java 获取gif帧数_Java图片处理之获取gif图一帧图片的两种方法

    前言 本文主要给大家介绍了关于Java获取gif图一帧图片的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.Java原生代码实现gif获取一帧图片 先看测试代码: pu ...

  9. java 获取当前月日_Java获取当前时间年月日的方法

    本文实例为大家分享了java获取当前时间年月日的具体代码,供大家参考,具体内容如下 import java.text.ParseException; import java.text.SimpleDa ...

最新文章

  1. 四:(之六_镜像发布)Dockerfile语法梳理和实践
  2. 【noqsl】beansdb的分布式实现~简单粗暴有效~
  3. python 多进程使用总结
  4. 在.NET Core中使用MySQL5.7的JSON类型字段
  5. 企业实战(Jenkins+GitLab+SonarQube)_08_jenkins安装和第一个Java项目构建
  6. Java中的StringBuffer、StringBuilder和包装器类型
  7. 使用Jupter Notebook实现简单的神经网络
  8. 复盘!12 小时清掉 3500 份生财日历
  9. paip.python错误解决8
  10. AR5B22刷win10的killer驱动
  11. c语言皮尔森系数程序,皮尔森相关系数(Pearson correlation coefficient)-Go语言中文社区...
  12. iPhone显示返回的是html界面,iPhone X怎么回到主界面?苹果X返回主页的两种方法...
  13. 小喇叭上面有红叉,显示未插入扬声器或耳机,电脑没声音
  14. 二维泊松方程求解--点迭代法
  15. 基于深度学习下的稳定学习究竟是什么?因果学习?迁移学习?之一
  16. 由 An Intriguing Failing of Convolutional Neural Networks and the CoordConv Solution 引起的思考
  17. iOS swift MD5加密
  18. 【无标题】如何用HTML做出一份简单的问卷调查?
  19. 从兴电子笔试题目小结
  20. PMP有效期三年后,还有必要续证吗?详细续证流程PDU积攒方法

热门文章

  1. 微信小程序元素定位查找
  2. android app 手机号码,android 安卓APP获取手机设备信息和手机号码的代码示例
  3. Python 使用matplotlib模块连续显示图片
  4. 生发Rogaine了解下
  5. iptables防止nmap扫描以及binlog
  6. java 时间字符串 转换_java实现时间与字符串之间转换
  7. 手机存量时代,互相拉踩是必修课
  8. java操作jedis_Redis教程 —— Java池化JedisPool操作Jedis
  9. 中控技术:5T技术融合实现工业3.0到工业4.0的转变
  10. 6-8 统计各位数字之和是5的数 (20 分)