PrinterJob.lookupPrintServices () возвращает пустой массив в системе Ubuntu 16 - PullRequest
0 голосов
/ 15 ноября 2018

Мой тестовый код приведен ниже

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 =======
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...