You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java代码提交打印任务滞留队列无法打印,其他应用打印正常

问题原因排查
  • DocFlavor配置错误:你当前使用javax.print.DocFlavor.BYTE_ARRAY.AUTOSENSE提交纯文本字节流,HP Deskjet 3512这类消费级喷墨打印机本身对原始纯文本字节的兼容性极差,AUTOSENSE无法自动识别你提交的纯文本格式,而其他办公软件提交的是已经光栅化处理的打印内容,所以可以正常输出。
  • 打印属性集为空:你传入的HashPrintRequestAttributeSet没有指定任何打印参数(包括纸张规格、色彩模式、边距等),打印机拿到不符合预期的空参数集后会直接挂起任务不会执行打印。
  • 字符编码不匹配:直接调用printText.getBytes()使用操作系统默认编码生成字节流,打印机的纯文本解码规则和系统编码不一致时,也会导致任务卡住不执行。
修复方案

将纯文本转换为可被打印机通用识别的打印格式,同时补充必要的打印参数,修复后参考代码如下:

import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.standard.*;
import java.awt.*;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterJob;

public class PrintTest {
    public static void main(String[] args) {
        try {
            // 指定要打印的文本
            String printText = "Hello World";
            // 获取默认打印服务
            PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
            PrinterJob printerJob = PrinterJob.getPrinterJob();
            printerJob.setPrintService(printService);
            
            // 配置打印参数
            HashPrintRequestAttributeSet attrSet = new HashPrintRequestAttributeSet();
            attrSet.add(MediaSizeName.ISO_A4); // 指定A4纸
            attrSet.add(PrintQuality.NORMAL); // 指定普通打印质量
            attrSet.add(OrientationRequested.PORTRAIT); // 指定纵向打印
            
            // 实现Printable接口绘制文本内容
            printerJob.setPrintable(new Printable() {
                @Override
                public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) {
                    if (pageIndex > 0) {
                        return NO_SUCH_PAGE;
                    }
                    Graphics2D g2d = (Graphics2D) graphics;
                    g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
                    g2d.setFont(new Font("宋体", Font.PLAIN, 12));
                    g2d.drawString(printText, 100, 100); // 坐标控制文本打印位置
                    return PAGE_EXISTS;
                }
            });
            
            // 提交打印
            printerJob.print(attrSet);
            System.out.println("打印任务提交成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

如果仍有问题可以额外添加校验逻辑确认打印服务是否匹配你的HP Deskjet 3512设备,避免代码选错默认打印机。

内容的提问来源于stack exchange,提问作者adcrown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:09:02