1
我有一个java程序,它可以将原始数据打印到热敏打印机。该代码在服务器中完美工作,但在客户端访问时,它会在服务器的打印机本身而不是客户端的默认打印机上进行打印。 以下是我用来打印的代码。请帮我看看代码。打印机打印服务器而不是客户端
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;
public class PrintText {
public static void main(String[] args) throws PrintException, IOException {
String defaultPrinter = PrintServiceLookup.lookupDefaultPrintService().getName();
System.out.println("Default printer: " + defaultPrinter);
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
// prints the famous hello world! plus a form feed
InputStream is = new ByteArrayInputStream("\nMadha Enterprice\n".getBytes(UTF8));
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(new Copies(1));
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
Doc doc = new SimpleDoc(is, flavor, null);
DocPrintJob job = service.createPrintJob();
PrintJobWatcher pjw = new PrintJobWatcher(job);
job.print(doc, pras);
pjw.waitForDone();
is.close();
}
}
class PrintJobWatcher {
boolean done = false;
PrintJobWatcher(DocPrintJob job) {
job.addPrintJobListener(new PrintJobAdapter() {
public void printJobCanceled(PrintJobEvent pje) {
allDone();
}
public void printJobCompleted(PrintJobEvent pje) {
allDone();
}
public void printJobFailed(PrintJobEvent pje) {
allDone();
}
public void printJobNoMoreEvents(PrintJobEvent pje) {
allDone();
}
void allDone() {
synchronized (PrintJobWatcher.this) {
done = true;
System.out.println("Printing done ...");
PrintJobWatcher.this.notify();
}
}
});
}
public synchronized void waitForDone() {
try {
while (!done) {
wait();
}
} catch (InterruptedException e) {
}
}
}
你是什么意思服务器?我在这里没有看到任何客户机/服务器体系结构...此代码是否在服务器上运行,并且是Web应用程序的一部分,还是正在运行您在'客户机'上发布的确切代码? – Plirkee
这不是确切的程序,而是我使用的确切逻辑。我使用泽西休息api与相同的逻辑打印到客户机。服务器是Tomcat7。 –
如果此代码在服务器端执行 - 它将在服务器端打印。它是如此简单。你没有清楚地说明这个代码是如何被调用的......所以不清楚执行的地方。但是从你的问题描述中,我会推断它在服务器端执行... – Plirkee