Java中的PrintService没有做任何事情

Posted

技术标签:

【中文标题】Java中的PrintService没有做任何事情【英文标题】:PrintService in java not doing anything 【发布时间】:2021-03-14 15:38:44 【问题描述】:

我试图打印一些我在 java 应用程序中拥有的文档。 但是当我选择打印机时,它会将文件添加到打印机队列中,但队列清除后没有任何反应。

这是我的代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.JobName;

public class test 

    public static void main(String[] args) throws PrintException, IOException 
        PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
        
        PrintService[] services = PrintServiceLookup.lookupPrintServices(DocFlavor.SERVICE_FORMATTED.PAGEABLE, attrs);
        PrintService service = PrintServiceLookup.lookupDefaultPrintService();
        
        PrintService selection = ServiceUI.printDialog(null, 200, 200, services, service, null, attrs); 
        if(selection != null)
        
            String fileName = "C:\\Temp\\test.docx";
            File f = new File(fileName);
            
            InputStream is = new FileInputStream(f);
            
            DocPrintJob job = selection.createPrintJob();

            SimpleDoc doc = new SimpleDoc(is, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
            
            PrintRequestAttributeSet jAttrs = new HashPrintRequestAttributeSet();
            jAttrs.add(new JobName(fileName, null));
            
            job.print(doc, jAttrs);

            if(is != null)
                is.close();
            
        
    


这是当我在对话框中选择打印机并单击“打印”时捕获的打印机队列:

在我的打印机中没有关于打印作业的信息...

当我从 pc 而不是从应用程序打印此文件时,它的工作完美。 当我使用这个java代码时:

Desktop.getDesktop().print(f);

它的印刷完美。 但这不是我想要的,我希望用户在对话框中选择打印机。

【问题讨论】:

【参考方案1】:

我在使用旧程序和新打印机 (Hp 477dw) 时遇到了类似的问题。解决办法是安装PCL6通用驱动。

【讨论】:

以上是关于Java中的PrintService没有做任何事情的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个正则表达式替换语句没有做任何事情? [复制]

primefaces上传没有做任何事情[重复]

npm start 完全没有做任何事情

为啥json没有做任何事情?

为啥 .catch() 没有做任何事情?

为啥我的模拟鼠标点击没有做任何事情?