0
我現在已經設法在JSF中創建了一個允許用戶上傳文本文件的上傳文件,我也可以顯示它。我設法將其打印到連接到客戶端的打印機。如何將此文本打印到使用Java代碼連接到服務器端的打印機?如何從字符串中打印出文本
我現在已經設法在JSF中創建了一個允許用戶上傳文本文件的上傳文件,我也可以顯示它。我設法將其打印到連接到客戶端的打印機。如何將此文本打印到使用Java代碼連接到服務器端的打印機?如何從字符串中打印出文本
它非常簡單,一旦你上傳文件,你將獲得整個文件內容,創建一個實用程序PrintDocument
類,並在需要打印時調用它。
public class PrintDocument {
public void printText(String text) throws PrintException, IOException {
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
InputStream is = new ByteArrayInputStream(text.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 document is done ...");
PrintJobWatcher.this.notify();
}
}
});
}
public synchronized void waitForDone() {
try {
while (!done) {
wait();
}
} catch (InterruptedException e) {
}
}
}
如果你需要得到所有打印機,使用PrintService[] services = PrinterJob.lookupPrintServices();
非常感謝你,現在我要試試這個,是有它發送的任何方式來打印到打印機隊列或打印機的IP地址而不是選擇打印機? – user1924104
如果您需要打印默認打印機,只需發送它即可。如果用戶選擇,添加一個jsf彈出窗口來選擇打印機 – vels4j