Java 调用得力打印机 型号(Deli DL-888B(NEW))

需求:通过传参生成一维码,并调用打印机打印,通过实验可以通过图片打印或者PDF 两种打印方式,此方法采用图片打印.
导入jar包

<!-- 二维码、条形码 -->
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.4.1</version>
</dependency>
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.4.1</version>
</dependency>

代码示例

String data = "123456789";
int width = 400;
int height = 150;
try {
    //生成一维码
    BitMatrix bitMatrix = new MultiFormatWriter().encode(data, BarcodeFormat.CODE_128, width, height);
    // 将 BitMatrix 转换为 BufferedImage
    BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix);

    // 创建一个新的图像,宽度和高度增加以容纳文本
    BufferedImage finalImage = new BufferedImage(width, height + 30, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = finalImage.createGraphics();
    // 设置透明背景
    g.setColor(Color.WHITE);
    g.fillRect(0, 0, width, height + 30);
    // 绘制条形码图像
    g.drawImage(image, 0, 0, null);
    // 设置字体和颜色
    g.setFont(new Font("Arial", Font.PLAIN, 30));
    g.setColor(Color.BLACK);
    // 绘制文本
    FontMetrics fm = g.getFontMetrics();
    int textWidth = fm.stringWidth(data);
    g.drawString(data, (width - textWidth) / 2, height + 25); // 根据需要调整位置
    // 释放图形上下文
    g.dispose();
    //保存最终图像
//            ImageIO.write(finalImage, "PNG", new File(htmlFilePath));
//
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    ImageIO.write(finalImage, "PNG", byteArrayOutputStream);
    ByteArrayInputStream is = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
    // 查找默认打印机
    PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
    if (printService == null) {
        System.out.println("No default print service found.");
        return;
    }
    // 创建DocFlavor对象,表示我们要打印的是HTML格式
    DocFlavor flavor = DocFlavor.INPUT_STREAM.PNG;
    // 创建SimpleDoc对象,表示要打印的文档
    SimpleDoc doc = new SimpleDoc(is, flavor, null);

    // 创建打印请求属性集
    PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
    pras.add(new Copies(1)); // 设置打印份数为1
    pras.add(OrientationRequested.PORTRAIT); // 设置打印方向为横向

    // 创建打印任务
    DocPrintJob job = printService.createPrintJob();
    // 执行打印任务
    job.print(doc, pras);
    System.out.println("Printing completed successfully.");
} catch (IOException | WriterException e) {
    e.printStackTrace();
} catch (PrintException e) {
    throw new RuntimeException(e);
}

以上方法中没有判定打印机的状态,经过实验得到以下两种方法:
第一种:

printService.getAttribute(PrinterState.class);
printService.getAttribute(PrinterStateReasons.class);

但是此种方法有可能获取不到打印机的状态信息
第二种:获取不脱机的打印机,可参考下面链接:
获取不脱机的打印机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值