Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
Currently retrieving the default printer installed on my machine for printing. I want to be able to pick which printer the documents go to. What is the best method of doing this ?
Code:
PrintService[] services =
PrintServiceLookup.lookupPrintServices(psInFormat, null);
System.out.println("Printer Selected " + services[Printerinx]);
//PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
DocFlavor[] docFalvor = services[Printerinx].getSupportedDocFlavors();
for (int i = 0; i < docFalvor.length; i++) {
System.out.println(docFalvor[i].getMimeType());
The PrintServiceLookup.lookupPrintService()
method provides a way to lookup a printer by name. Prepare a HashAttributeSet
with a PrinterName
attribute object and pass it to the lookup method.
Use code like below:
AttributeSet aset = new HashAttributeSet();
aset.add(new PrinterName("MyPrinter", null));
PrintService[] pservices =
PrintServiceLookup.lookupPrintServices(null, aset);
Works on Linux with CUPS.
Create the PrintUtility
class below, import it and try calling PrintUtility.findPrintService("name_of_my_printer");
if you know your printer name; if you don't know what printers you have access to, call PrintUtility.getPrinterServiceNameList();
for a List
containing all viable registered printer names.
Alternately see my answer to this SO question for more details:
package com.stackoverflow.print;
import java.awt.print.PrinterJob;
import javax.print.PrintService;
import java.util.List;
import java.util.ArrayList;
public final class PrintUtility {
* Retrieve a Print Service with a name containing the specified PrinterName; will return null if not found.
* @return
public static PrintService findPrintService(String printerName) {
printerName = printerName.toLowerCase();
PrintService service = null;
// Get array of all print services
PrintService[] services = PrinterJob.lookupPrintServices();
// Retrieve a print service from the array
for (int index = 0; service == null && index < services.length; index++) {
if (services[index].getName().toLowerCase().indexOf(printerName) >= 0) {
service = services[index];
// Return the print service
return service;
* Retrieves a List of Printer Service Names.
* @return List
public static List<String> getPrinterServiceNameList() {
// get list of all print services
PrintService[] services = PrinterJob.lookupPrintServices();
List<String> list = new ArrayList<String>();
for (int i = 0; i < services.length; i++) {
list.add(services[i].getName());
return list;
* Utility class; no construction!
private PrintUtility() {}
–
–
DocFlavor fl= null;
PrintService printService[]= PrintServiceLookup.lookupPrintServices(fl,null);
for(i=0;i<printService.length;i++)
System.out.println(printService[i]);
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.