代码之家  ›  专栏  ›  技术社区  ›  arjuncc

PrinterJob.lookupPrintServices打印服务()在Ubuntu 16系统上返回空数组

  •  0
  • arjuncc  · 技术社区  · 6 年前

    我的测试代码如下

    final static Logger LOGGER = Logger.getLogger(App.class);
        private static String location = "";
        public static PrintService choosePrinter(String printerName) {
            PrintService[] services = PrinterJob.lookupPrintServices(); // list of printers
            System.out.println("services : " +services);
            LOGGER.info("services : " + services);
            PrintService printService = null;
            //int count = service.length;
    
            /*
            for (int i = 0; i < count; i++) {
                String availablePrinterName = service.getName();
                System.out.println(availablePrinterName);
                if (service[i].getName().equalsIgnoreCase(printerName)) {
                    printService = service[i];
                    i = count;
                }
            }*/
    
            PrintService ps = PrintServiceLookup.lookupDefaultPrintService();
            System.out.println("services : " +ps.getName());
            LOGGER.info("services : " + ps.getName());
    
    
            if(services != null) {
                System.out.println("availablePrinter count: " +services.length);
                LOGGER.info("availablePrinter count: " + services.length);
            }
    
    
            for(PrintService service : services) {
                String availablePrinterName = service.getName();
                System.out.println("availablePrinter : " +availablePrinterName);
                LOGGER.info("availablePrinter : " + availablePrinterName);
    
                if(service.getName().contains(printerName)) {
                    printService = service;
                    break;
                }
            }
    
            return printService;
        }
    
        public static void main(String[] args) {
            try {
    
                LOGGER.info("===== PRINT JOB 2 STARTED =======");
                Properties prop = getProperty();
                String printerName = prop.getProperty("printername");
                //String fileLocation = prop.getProperty("filelocation");
                String printStatus = prop.getProperty("enableprint");
                Double height = Double.valueOf(prop.getProperty("height"));
                Double width = Double.valueOf(prop.getProperty("width"));
                Boolean enablePrintPageSetup = Boolean.valueOf(prop.getProperty("enablePrintPageSetup"));
                // get the property value and print it out
            System.out.println("printerName : " + printerName);
            System.out.println("printStatus : " + printStatus);
            System.out.println("location : " + location);
            System.out.println("enablePrintPageSetup : " + enablePrintPageSetup);
            System.out.println("width : " + width + ", height" +height);
            LOGGER.info("printerName : " + printerName);
            LOGGER.info("printStatus : " + printStatus);
            LOGGER.info("location : " + location);
            LOGGER.info("enablePrintPageSetup : " + enablePrintPageSetup);
            LOGGER.info("width : " + width + ", height" +height);
    
    
                PDDocument pdf = PDDocument.load(new File(location));
                PrinterJob job = PrinterJob.getPrinterJob();
    
                // define custom paper
                Paper paper = new Paper();
                paper.setSize((width*72), (height*72)); // 1/72 inch
                paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight());
    
                // custom page format
                PageFormat pageFormat = new PageFormat();
                    if(enablePrintPageSetup) {
                        pageFormat.setPaper(paper);
                    }
                pageFormat.setOrientation(PageFormat.PORTRAIT);
    
                // override the page format
                Book book = new Book();
                // append all pages
                PDFPrintable pdfPrintable = new PDFPrintable(pdf, Scaling.SHRINK_TO_FIT);
                book.append(pdfPrintable, pageFormat, pdf.getNumberOfPages());
                job.setPageable(book);
    
                //HP LaserJet M1530
    
                PrintService printService = choosePrinter(printerName);
                if(printService != null) {
    
                    if(Boolean.parseBoolean(printStatus)) {
                        LOGGER.info("Print enabled  ");
                         job.setPrintService(printService);
                         job.print();
                    } else {
                        LOGGER.info("Print disbaled  ");
                    }
    
                } else {
                    System.out.println("No PDF printer available.");
                    LOGGER.info("===== No PDF printer available. =======");
                }
                System.out.println("===== PRINT JOB 2 STOPPED =======");
                LOGGER.info("===== PRINT JOB 2 STOPPED =======");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                LOGGER.error("Error : ", e);
                e.printStackTrace();
            }
        }
    
    
        private static Properties getProperty() {
            Properties prop = new Properties();
            try {
    
                File jarPath=new File(App_1.class.getProtectionDomain().getCodeSource().getLocation().getPath());
                String propertiesPath=jarPath.getParentFile().getAbsolutePath();
                System.out.println(" propertiesPath-"+propertiesPath);
                prop.load(new FileInputStream(propertiesPath+"/config.properties"));
                location = propertiesPath + "/printpdf.pdf";
            } catch (Exception e) {
               e.printStackTrace(); 
               LOGGER.error("Error : ", e);
            }
            return prop;
        }
    

    此代码打印文档时没有问题。我的本地windows机器和Ubuntu 17机器。当我用同样的代码打印它在Ubuntu 16中不工作时。 我不确定是否有配置问题。我的日志如下所述。有什么想法吗?

    log4j:WARN No such property [maxBackupIndex] in test.com.test.CustomFileAppender.
    log4j:WARN No such property [maxFileSize] in test.com.test.CustomFileAppender.
    log4j:ERROR Could not find value for key log4j.appender.infoLogger log4j:ERROR Could not instantiate appender named "infoLogger".
    2018-11-15 21:19:58 INFO  App:59 - ===== PRINT JOB 2 STARTED =======
      propertiesPath-/home/user01/sw/cc
    printerName : Zebra_ZT410_86.3
    printStatus : false
    location : /home/user01/sw/cc/printpdf.pdf enablePrintPageSetup : false width : 3.97, height5.97
    2018-11-15 21:19:58 INFO  App:73 - printerName : Zebra_ZT410_86.3
    2018-11-15 21:19:58 INFO  App:74 - printStatus : false
    2018-11-15 21:19:58 INFO  App:75 - location : 
    /home/user01/sw/cc/printpdf.pdf
    2018-11-15 21:19:58 INFO  App:76 - enablePrintPageSetup : false
    2018-11-15 21:19:58 INFO  App:77 - width : 3.97, height5.97
    2018-11-15 21:19:58 INFO  PDDeviceRGB:138 - To get higher rendering speed on JDK8 or later,
    2018-11-15 21:19:58 INFO  PDDeviceRGB:139 -   use the option -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider
    2018-11-15 21:19:58 INFO  PDDeviceRGB:140 -   or call System.setProperty("sun.java2d.cmm",
    "sun.java2d.cmm.kcms.KcmsServiceProvider")
    services : [Ljavax.print.PrintService;@3b192d32
    2018-11-15 21:19:58 INFO  App:36 - services : 
    [Ljavax.print.PrintService;@3b192d32
    availablePrinter count: 0
    2018-11-15 21:19:58 INFO  App:39 - availablePrinter count: 0 No PDF printer available.
    2018-11-15 21:19:58 INFO  App:117 - ===== No PDF printer available. ======= ===== PRINT JOB 2 STOPPED =======
    2018-11-15 21:19:58 INFO  App:120 - ===== PRINT JOB 2 STOPPED =======
    
    0 回复  |  直到 6 年前