用Java强制目标打印机

有没有办法使用HashPrintRequestAttributeSet强制java中的目标打印机?

我不希望用户能够在printdialog中更改打印机

谢谢

不得不努力解决这个问题,但对于后代,这里是我的一些代码:

PrintService[] printServices; PrintService printService; PageFormat pageFormat; String printerName = "Your printer name in Devices and Printers"; PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet(); printServiceAttributeSet.add(new PrinterName(printerName, null)); printServices = PrintServiceLookup.lookupPrintServices(null, printServiceAttributeSet); pageFormat = new PageFormat(); // If you want to adjust heigh and width etc. of your paper. pageFormat = printerjob.defaultPage(); PrinterJob printerjob = PrinterJob.getPrinterJob(); printerjob.setPrintable(new Server(), pageFormat); // Server was my class's name, you use yours. try { printService = printServices[0]; printerjob.setPrintService(printService); // Try setting the printer you want } catch (ArrayIndexOutOfBoundsException e) { System.err.println("Error: No printer named '" + printerName + "', using default printer."); pageFormat = printerjob.defaultPage(); // Set the default printer instead. } catch (PrinterException exception) { System.err.println("Printing error: " + exception); } try { printerjob.print(); // Actual print command } catch (PrinterException exception) { System.err.println("Printing error: " + exception); } 

我的代码解决了这个问题:

 String printerNameDesired = "My Printer"; PrintService[] service = PrinterJob.lookupPrintServices(); // list of printers int count = service.length; for (int i = 0; i < count; i++) { if (service[i].getName().equalsIgnoreCase(printerNameDesired)) { docPrintJob = service[i].createPrintJob(); i = count; } } PrinterJob pjob = PrinterJob.getPrinterJob(); pjob.setPrintService(docPrintJob.getPrintService()); pjob.setJobName("job"); pjob.print(); 

我刚刚在Java中运行cmd命令解决了这个问题

 static void changeWindowsDefaultPrinter(String printerName) { String cmdLine = String.format("RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n \"%s\"", printerName); ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", cmdLine ); builder.redirectErrorStream(true); Process p = null; try { p = builder.start(); } catch (IOException e) { e.printStackTrace(); } BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = new String(); while (true) { try { line = r.readLine(); } catch (IOException e) { e.printStackTrace(); } if (line == null) { break; } System.out.println( "result " + line); } } 

它对我来说很糟糕:D