我已经实现了一个程序,可以使用IP地址,打印机名称将文档打印到特定的打印机

码:

URI myURI=null;
FileInputStream psStream=null;
try   {
       psStream = new FileInputStream( "sample.docx" );
   }
catch ( FileNotFoundException e )   {
    e.printStackTrace();
}
    DocFlavor psInFormat = DocFlavor.INPUT_STREAM.GIF;
    Doc myDoc = new SimpleDoc( psStream, psInFormat, null );
     PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
    aset.add( new Copies(5) );
    try {
        String host="192.255.301.147";
        String printer="HP LaserJet 5000 Series PCL6";
        String theUrl = "ipp://"+host+"/printers/"+printer;
        theUrl = URLEncoder.encode(theUrl, "UTF-8");
        myURI =  new URI(theUrl);
              aset.add(new PrinterURI(myURI));
    } catch (URISyntaxException e) {
        System.out.println("URI exception caught: "+e);
    } catch (UnsupportedEncodingException e) {
             e.printStackTrace();
    }

  PrintService[] services = PrintServiceLookup.lookupPrintServices( psInFormat, aset );
   if ( services.length > 0 ) {
     DocPrintJob job = services[0].createPrintJob();
     try {
             job.print( myDoc, aset );
     }
     catch ( PrintException e ){
     }
}


在运行程序时,收到ClasscastException。

Exception in thread "Main Thread" java.lang.ClassCastException
    at javax.print.attribute.AttributeSetUtilities.verifyAttributeValue(AttributeSetUtilities.java:534)
    at javax.print.attribute.HashAttributeSet.add(HashAttributeSet.java:283)
    at com.src.print.TestPrint2.main(TestPrint2.java:64)


在没有在RequestAttributeSet(aset.add(new PrinterURI(myURI)))中添加PrinterURI Attribute的情况下,程序可以正常工作。
它采用默认打印机配置并打印文档。

你能帮我这个忙吗?如何使用PrinterURI API?

最佳答案

通过阅读stacktrace和相关类文档,很可能会发生此异常,因为HashPrintRequestAttributeSet(扩展了PrintRequestAttributeset)强制所有添加的类型必须符合PrintRequestAttribute

如果您看到PrinterURI的文档,则会看到它没有实现导致异常的接口。阅读您的代码和问题,我想您可能想使用Destination而不是PrinterURI。

07-26 01:39