java调用打印机打印自定义的图片

本文提供了一个使用Java实现打印服务的示例代码,通过构建打印请求属性集并查找可用打印服务来实现打印功能。

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

package test;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.MediaPrintableArea;

public class QingPrint {
public static void main(String[] args) throws Exception {

// 构建打印请求属性集
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
// 设置打印格式,因为未确定类型,所以选择autosense
DocFlavor flavor = DocFlavor.INPUT_STREAM.JPEG;
// 查找所有的可用的打印服务
PrintService[] printService = PrintServiceLookup.lookupPrintServices(
flavor, pras);
// 如果没有获取打印机
if (printService.length == 0) {
// 终止程序
return;
}
// 定位默认的打印服务
PrintService defaultService = PrintServiceLookup
.lookupDefaultPrintService();
// 获得打印工作
DocPrintJob job = defaultService.createPrintJob();
DocAttributeSet das = new HashDocAttributeSet();
das.add(new MediaPrintableArea(1, 1, 4,3, MediaPrintableArea.INCH));
// 设置打印内容
Doc doc = new SimpleDoc(getinputstream(), flavor, das);
// 出现设置对话框
// PrintService service = ServiceUI.printDialog(null, 200,
// 00,printService, defaultService, flavor, pras);
// if (service != null) {
// 开始打印
job.print(doc, pras);
getinputstream().close();
// }
}

public static ByteArrayInputStream getinputstream() throws Exception {
// ByteArrayInputStream inputStream;
// 在内存中创建图象
int width = 300, height = 200;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
// 设定背景色
g.setColor(new Color(250, 250, 250));
g.fillRect(0, 0, width, height);
// 设定字体
g.setFont(new Font("宋体", Font.BOLD, 18));
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(new Color(0, 0, 0));

// g.drawLine(0,0,50,50);

// 取随机产生的认证码(6位数字)
g.drawString("中国", 10, 30);
g.drawString("中国", 60, 30);
g.drawString("中国", 110, 30);
g.drawString("中国", 160, 30);
g.drawString("中国", 210, 30);
g.drawString("山东", 10, 60);
g.drawString("山东", 60, 60);
g.drawString("山东", 110, 60);
g.drawString("山东", 160, 60);
g.drawString("山东", 210, 60);
g.drawString("济南", 10, 90);
g.drawString("济南", 60, 90);
g.drawString("济南", 110, 90);
g.drawString("济南", 160, 90);
g.drawString("济南", 210, 90);
g.drawString("洪楼", 10, 120);
g.drawString("洪楼", 60, 120);
g.drawString("洪楼", 110, 120);
g.drawString("洪楼", 160, 120);
g.drawString("洪楼", 210, 120);
g.drawString("花园", 10, 150);
g.drawString("花园", 60, 150);
g.drawString("花园", 110, 150);
g.drawString("花园", 160, 150);
g.drawString("花园", 210, 150);
// 图象生效
g.dispose();
ByteArrayOutputStream output = new ByteArrayOutputStream();
ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);
ImageIO.write(image, "JPEG", imageOut);
imageOut.close();
ByteArrayInputStream input = new ByteArrayInputStream(
output.toByteArray());
return input;
}

}
Java中,要通过程序控制打印机打印小票,通常需要以下几个步骤: 1. **添加打印机驱动**:首先,你需要确保你的系统安装了兼容的打印机驱动,并且Java应用程序有权限访问打印机。 2. **引入JDK PrintService API**:Java SE从1.4版本开始支持打印功能,通过`java.awt.print`包下的`PrinterJob`类来操作打印机。 ```java import java.awt.print.PrinterJob; ``` 3. **创建并设置`PrinterJob`实例**: ```java PrinterJob printerJob = PrinterJob.getPrinterJob(); ``` 4. **选择打印机**: ```java if (!printerJob.isPrintable()) { System.out.println("No default printer is set."); return; } printerJob.setPrintable(yourPrintableObject); // yourPrintableObject是你自定义的Printable对象 ``` 5. **打开并打印**: ```java try { printerJob.print(); } catch (PrinterException e) { System.err.println("Error printing: " + e.getMessage()); } ``` 6. **处理异常**:在实际应用中,可能会遇到打印机未连接、耗材不足等问题,记得捕获`PrinterException`或其他可能抛出的异常。 7. **自定义小票内容**:为了生成小票,你需要创建一个实现了`java.awt.print.Printable`接口的类,这个类通常包含`print()`方法,用于提供打印页面的内容。 例如: ```java public class Receipt implements Printable { private String receiptContent; // 构造函数和getter/setter... @Override public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { // 检查是否超出边界,然后绘制小票内容 if (pageIndex > 0 || pageFormat != null) { return NO_SUCH_PAGE; } graphics.drawString(receiptContent, 10, 10); // 假设这是你要打印的文字 return PAGE_EXISTS; } } ``` 将`Receipt`对象传给`setPrintable()`,然后调用`print()`方法即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值