C'è un modo per forzare la stampante di destinazione in java, utilizzando HashPrintRequestAttributeSet?Forza stampante target in Java
Non voglio che l'utente sia in grado di cambiare la stampante nelle PrintDialog
Grazie
C'è un modo per forzare la stampante di destinazione in java, utilizzando HashPrintRequestAttributeSet?Forza stampante target in Java
Non voglio che l'utente sia in grado di cambiare la stampante nelle PrintDialog
Grazie
dovuto capire questo nel modo più duro, ma anche per le generazioni future, ecco alcuni dei miei codice:
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);
}
il mio codice per risolvere questo:
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();
Questo ha funzionato per me, solo che hai dimenticato di inizializzare docPrintJob. Suggerisco di aggiungere il seguente codice per renderlo pienamente funzionante: 'DocPrintJob docPrintJob = null;' dopo 'PrintService [] service = PrinterJob.lookupPrintServices();'. – bashoogzaad
Aggiornato qui: http://stackoverflow.com/q/35535589/285594 – YumYumYum
Ho appena risolto questo problema eseguendo il comando cmd in Java
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);
}
}
ed è Wroked per Me: D
Perché ........... –
Nessun utente ....? ... – Phil