Hi together, in May we had a discussion on this topic. Meanwhile I solved my problem due to an other thread on this mailing list. Here is the code I use for getting the printers and its tray names from OOo: -----%<----- import java.util.regex.Matcher; import java.util.regex.Pattern;
import com.sun.star.awt.XInfoPrinter; import com.sun.star.awt.XPrinterServer; import com.sun.star.lang.IllegalArgumentException; import com.sun.star.lang.XMultiComponentFactory; import com.sun.star.uno.AnyConverter; import com.sun.star.uno.Exception; import com.sun.star.uno.XComponentContext; import de.twc.oocom.oo.OOWorkbench; import de.twc.utils.IPrinter; public class OOPrinter implements IPrinter { /** * Instance of this class. */ private static volatile IPrinter INSTANCE; /** * The OpenOffice.org [EMAIL PROTECTED] XPrinterServer}. */ private XPrinterServer xPrinterServer = null; /** * Getting the instance of this class. This class is a * singleton. * @return [EMAIL PROTECTED] IPrinter} Instance of this class. */ public static IPrinter getInstance() { if(INSTANCE == null) synchronized (OOPrinter.class) { if (INSTANCE == null) { INSTANCE = new OOPrinter(); } } return INSTANCE; } /** * Getting the printer trays of a printer via OpenOffice.org. * OpenOffice.org does not offer a method to get the printer * tray names directly. But is * offers a method, to get printer information and returns a * String like this: "*;*;Tray Name; ;*;". This method derives * the tray name from the * string by detecting the sourrounding semicolons. * @param printerName String with the name of the printer. * @return String[] with the names of the printer trays. */ @Override public String[] getPrinterTrays(String printerName) { if(xPrinterServer == null) initXPrinterServer(); XInfoPrinter xInfoPrinter = xPrinterServer.createInfoPrinter(printerName); // Print the trays received the OOo way String ooTrays[] = xInfoPrinter.getFormDescriptions(); for(int i = 0; i < ooTrays.length; i++) { String rangeRegex = "(.*;){2}[^;]{5,}"; Pattern pattern = Pattern.compile(rangeRegex); Matcher matcher = pattern.matcher(ooTrays[i]); while(matcher.find()){ String ooTray = matcher.group(); ooTrays[i] = ooTray.substring( ooTray.lastIndexOf(";") + 1); } } return ooTrays; } /** * Getting the printer names from OpenOffice.org. * @return String[] containing the printer names. */ @Override public String[] getPrinters() { if(xPrinterServer == null) initXPrinterServer(); return xPrinterServer.getPrinterNames(); } /** * Initialising the [EMAIL PROTECTED] XPrinterServer}. */ private void initXPrinterServer() { XComponentContext xCC = OOWorkbench.getXComponentContext(); XMultiComponentFactory xMCF = xCC.getServiceManager(); Object oPrintServer = null; try { oPrintServer = xMCF.createInstanceWithContext( "com.sun.star.awt.PrinterServer", xCC); } catch (Exception e) { e.printStackTrace(); } try { xPrinterServer = (XPrinterServer) AnyConverter.toObject( XPrinterServer.class, oPrintServer); } catch (IllegalArgumentException e) { e.printStackTrace(); } } } -----%<----- I hope this code serves you. Greetings, Tobias --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]