¿Hay alguna manera de forzar la impresora de destino en Java, utilizando HashPrintRequestAttributeSet?Fuerza la impresora de destino en Java
no quiero que el usuario sea capaz de cambiar la impresora en los PrintDialog
Gracias
¿Hay alguna manera de forzar la impresora de destino en Java, utilizando HashPrintRequestAttributeSet?Fuerza la impresora de destino en Java
no quiero que el usuario sea capaz de cambiar la impresora en los PrintDialog
Gracias
Tuvo que resolver esto de la manera difícil, pero para las generaciones futuras, aquí está un poco de mi código:
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);
}
Mi código para resolver esto:
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();
Este me funcionó, solo que olvidó inicializar el docPrintJob. Sugiero agregar el siguiente código para que sea completamente funcional: 'DocPrintJob docPrintJob = null;' después de 'PrintService [] service = PrinterJob.lookupPrintServices();'. – bashoogzaad
Actualizado aquí: http://stackoverflow.com/q/35535589/285594 – YumYumYum
Acabo de resolver este problema mediante la ejecución comando cmd en 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);
}
}
Y es Wroked para mí: D
Por qué ........... –
Ningún usuario ....? ... – Phil