使用 java 打印时风格无效

问题描述

我试图像这样用 java 打印文档:

但在某些计算机中它给我错误:

INFO: Got an exception.
sun.print.PrintJobFlavorException: invalid flavor

在这一行:

job.print(doc,attrs);

这是代码:

  public void printFiles(ArrayList<ByteArrayInputStream> files) throws PrintException,IOException {
        Native.loading.setText(Constants.PRINT_LOADING);

        long startTime = System.currentTimeMillis();
        
        PrintService[] services = PrintServiceLookup.lookupPrintServices(null,null);
        PrintService service = PrintServiceLookup.lookupDefaultPrintService();
        
        PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
        attrs.add(Sides.DUPLEX);
        attrs.add(new JobName(Constants.PRINT_JOB_NAME,null));

        long endTime   = System.currentTimeMillis();
        double totalTime = (endTime - startTime) / 1000.0;
        logger.info("PrintFiles time 1: " + totalTime);
        
        DocFlavor[] flavors = service.getSupportedDocFlavors();
        for(int i=0; i<flavors.length; i++)
        {
              logger.info("flavor " + i + ": " + flavors[i].toString());
        }
        
        logger.info("curFlavor: " + DocFlavor.INPUT_STREAM.AUTOSENSE.toString());
        
        if(service != null)
        {
              logger.info("Default Printer: " + service.getName());
              
              startTime = System.currentTimeMillis();
              
              PrintService selection = ServiceUI.printDialog(null,200,services,service,null,attrs); 
              
              endTime   = System.currentTimeMillis();
              totalTime = (endTime - startTime) / 1000.0;
              logger.info("PrintFiles time 2: " + totalTime);
              
              startTime = System.currentTimeMillis();
              if(selection != null)
              {
                    logger.info(selection.getName());

                    for(int i=0; i<files.size(); i++)
                    {
                          ByteArrayInputStream file = files.get(i);

                          DocPrintJob job = selection.createPrintJob();
                          Doc doc = new SimpleDoc(file,DocFlavor.INPUT_STREAM.AUTOSENSE,null);
                          
                          job.addPrintJobListener(new PrintListener());
                          job.print(doc,attrs);

                          if(file != null)
                                file.close();
                    }
              }
              
              endTime   = System.currentTimeMillis();
              totalTime = (endTime - startTime) / 1000.0;
              logger.info("PrintFiles time 3: " + totalTime);
        }
  }

我尝试打印我的计算机(可以工作)和另一台计算机(无法工作)支持的所有口味。

这是工作计算机支持的口味:

INFO: flavor 0: image/gif; class="[B"

INFO: flavor 1: image/gif; class="java.io.InputStream"

INFO: flavor 2: image/gif; class="java.net.URL"

INFO: flavor 3: image/jpeg; class="[B"

INFO: flavor 4: image/jpeg; class="java.io.InputStream"

INFO: flavor 5: image/jpeg; class="java.net.URL"

INFO: flavor 6: image/png; class="[B"

INFO: flavor 7: image/png; class="java.io.InputStream"

INFO: flavor 8: image/png; class="java.net.URL"

INFO: flavor 9: application/x-java-jvm-local-objectref; class="java.awt.print.Pageable"

INFO: flavor 10: application/x-java-jvm-local-objectref; class="java.awt.print.Printable"

INFO: flavor 11: application/octet-stream; class="[B"

INFO: flavor 12: application/octet-stream; class="java.net.URL"

INFO: flavor 13: application/octet-stream; class="java.io.InputStream"

INFO: flavor 14: application/postscript; class="[B"

INFO: flavor 15: application/postscript; class="java.io.InputStream"

INFO: flavor 16: application/postscript; class="java.net.URL"

这是不工作的计算机中的味道:

INFO: flavor 0: application/x-java-jvm-local-objectref; class="java.awt.print.Pageable"

INFO: flavor 1: application/x-java-jvm-local-objectref; class="java.awt.print.Printable"

我想知道为什么我的打印机只有两种口味?这台打印机在这台计算机上工作正常,除了 java 应用程序。 如何修复此代码以适用于所有打印机?

tnx

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...