Мой тестовый код приведен ниже
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 =======