实现目标:
1、可以测试打印机是否连接
2、监控打印机的状态:打印机缺纸、打印机卡纸
我从PrintService里获取PrinterStateReasons,可是总是为空。不知道怎么才能获取到打印机的PrinterStateReasons
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;
}
}
相关推荐
利用SNMP(简单网络管理协议)和WMI(Windows Management Instrumentation)等技术也可以实现对打印机的远程监控。 6. **数据安全与隐私保护**:实时监控也可能涉及数据安全和用户隐私问题,因此,选择合适的监控...
在Java编程环境中,配置打印机、获取系统中的所有打印机列表以及根据特定打印机名称进行小票打印是常见的需求。本文将深入探讨这些知识点,并提供相关的代码示例。 首先,我们需要理解Java中与打印相关的基础概念。...
简单的例子,用于通过SNMP访问利盟打印机 可用于自助终端程序中的本地设备状态信息获取或操控
【JAVA USB监听器】是一种基于Java编程语言实现的软件工具,其主要功能是对USB设备进行实时监控,当USB设备插入时,能够自动检测并复制指定类型的文件到预先设定的目录中。这种工具对于需要频繁从USB设备中获取特定...
打印监控小工具,作为一款自制的应用程序,为用户提供了一种便捷的方式,以监控网络内的网络打印机和共享打印机的使用状况。这款工具的出现,不仅能够帮助管理员有效地进行打印控制管理,还能实现费用控制和权限控制...
在这个“Spring实现的一个打印机”的项目中,我们可以深入探讨Spring如何帮助实现一个打印机服务,并从中学习Spring的相关知识点。 首先,我们要理解Spring的核心概念——依赖注入(DI)。在传统的Java程序中,对象...
3. **状态查询**:开发者可以获取打印机的状态信息,如墨盒余量、纸张剩余等,以便于实时监控打印机的工作情况。 4. **配置设置**:API还提供了设置打印机参数的功能,如打印速度、浓度、双面打印等,可以根据实际...
通过分析这些示例,开发者可以学习到如何在Java环境中实现基本的打印功能,包括从GUI组件,自定义数据结构,到控制打印机进行输出。同时,这些代码也可以作为进一步开发更复杂打印功能的基础,例如打印预览,多页...
该项目包括FSP设计和Java多线程实现,用于2名学生和1名技术人员使用的共享打印机。 FSP有3个独立过程。 印表机处理 用3篇论文进行初始化 应该至少有1纸才能进行打印 用户必须具有互斥访问打印机的权限 每次打印时...
【打印机管理网(Java Web+...总的来说,打印机管理网利用Java Web的强大功能和Bootstrap的易用性,实现了对打印机设备的有效管理和监控。这种结合不仅提高了开发效率,也确保了应用在多平台上的稳定性和用户体验。
Java打印API还提供了`PrintRequestAttributeSet`和`PrintJobAttributeSet`,这两个接口用于设置打印请求的属性和监控打印作业的状态。它们是`AttributeSet`的子接口,包含各种打印属性,如纸张大小、分辨率、颜色...
当今社会是一个信息化高速发展的时代,公司的各项工作都已经有了信息化工具的支持,但是作为公司在日常运作中一项不可缺少的工作项目:耗材的管理,虽然已经有不少软件公司已经对此做出信息化的工具,但是,在市场上...
通过这个项目,开发者不仅可以学习到SNMP协议的基础知识,还能掌握如何在Java环境中实现网络设备的远程管理和监控,这对于网络运维和系统集成工作来说是非常有价值的技能。同时,论文部分可能会对整个实现过程进行...
标题中的“Sring实现打印机”很可能是一个拼写错误,正确的应该是“Spring实现打印机”。这个标题表明我们将探讨如何利用Spring框架来构建一个打印机相关的应用程序。在Java编程中,Spring是一个广泛使用的开源框架...
- **库存控制**:通过RFID技术实时监控库存情况,并使用Java编写的应用程序来分析数据和生成报告。 - **安全认证**:利用RFID进行身份验证,结合Java实现更复杂的安全机制。 #### 三、Sun Java System RFID ...
以上就是基于`PrintDemo`项目中可能涉及的关键技术点,这些知识点可以帮助你理解如何在Android App中实现蓝牙打印机的连接和打印功能。在实际开发中,你可以根据`PrintDemo`的源代码深入学习和实践,以完善和优化你...
打印机mib信息,根据里面内容可以获取对应的监控信息,已经测试过好用,大家放心下载,打印机mib信息
基于微服务springboot架构开发,是轻量高性能的分布式监控系统,核心采集指标包括:**cpu使用率,cpu温度,内存使用率,磁盘容量,磁盘IO,硬盘SMART健康状态,系统负载,连接数量,网卡流量,硬件系统信息等。...
在Java编程语言中,打印是日常开发中常见的一...通过深入理解和熟练运用,开发者可以更有效地调试、监控和记录程序运行状态。如果你对Java打印有更具体的问题或需求,可以进一步研究提供的博客链接或探索相关API文档。
斑马打印机API的jar包是Java开发者用于与斑马(Zebra)品牌的射频打印机进行交互的重要工具。这个API提供了一系列的类和方法,使得程序员能够轻松地建立应用程序,实现打印ZPL(Zebra Programming Language)语言的...