java 获取打印机缺纸_Java怎么实现打印机监控

该博客主要展示了如何使用Java来实现打印机监控,包括检查打印机是否连接,以及监控打印机的缺纸和卡纸状态。通过`PrintService`获取`PrinterStateReasons`来判断打印机状态,但博主遇到获取为空的问题。提供的Java代码包含了一个`TextPrinter`类,用于打印和监听打印事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

展开全部

实现目标:

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;

}

}

本回答由提问者推荐

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值