我已经实现了一个程序,可以使用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。