[英]Unable to print a doc from specifice printer in Swing
I am writing a code that should find list of printers on client machine and set a particulate printer for print a Doc. 我正在编写一个代码,该代码应在客户端计算机上找到打印机列表,并设置一台用于打印文档的颗粒打印机。 But I was goggling on net and I found code some think like that: 但是我在网上闲逛,发现代码有些像这样:
package org.ui;
import java.io.FileInputStream;
import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
public class Printing {
public static void main (String [] args) {
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet ();
PrintService [] pservices = PrintServiceLookup.lookupPrintServices (flavor, aset);
try {
int printer = getPrinter(pservices);
if(printer == -1) {
throw new Exception("No network printer found");
}
DocPrintJob pj = pservices[0].createPrintJob();
FileInputStream fis = new FileInputStream ("c:///file.txt");
Doc doc = new SimpleDoc (fis, flavor, null);
pj.print (doc, aset);
}
catch (Exception ex) {
ex.printStackTrace ();
}
}
private static int getPrinter(PrintService[] pservices) {
int printer = -1;
for(int i = 0; i<pservices.length; i++) {
if(pservices[i].getName().contains("\\\\")) {
System.out.println("network printer: " + pservices[i].toString());
printer = i;
break;
}
}
return printer;
}
}
But I am unable to get print on paper, can anyone tell me whats the problem in this code? 但是我无法在纸上打印,任何人都可以告诉我这段代码有什么问题吗? Its a desktop application. 它是一个桌面应用程序。
According to the documentation of print()
根据print()
的文档
[...] When the print method returns, printing may not yet have completed as printing may happen asynchronously, perhaps in a different thread. [...]打印方法返回时,打印可能尚未完成,因为打印可能是异步进行的,可能是在另一个线程中进行的。 Application clients which want to monitor the success or failure should register a PrintJobListener. 想要监视成功或失败的应用程序客户端应注册一个PrintJobListener。
This means that you need to register a PrintJobListener
to be able to tell what the problem is: 这意味着您需要注册一个PrintJobListener
才能分辨出问题所在:
Try: 尝试:
pj.addPrintJobListener(new PrintJobListener() {
@Override
void printDataTransferCompleted(PrintJobEvent pje) {
System.out.println("Transfer completed");
}
@Override
void printJobCanceled(PrintJobEvent pje) {
System.out.println("Cancelled");
}
@Override
void printJobCompleted(PrintJobEvent pje) {
System.out.println("Completed");
}
@Override
void printJobFailed(PrintJobEvent pje) {
System.out.println("Failed");
}
@Override
void printJobNoMoreEvents(PrintJobEvent pje) {
System.out.println("No more events");
}
@Override
void printJobRequiresAttention(PrintJobEvent pje) {
System.out.println("Check printer");
}
});
before calling print()
and see what gets outputed to the console 在调用print()
之前,先查看输出到控制台的内容
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.