У меня проблема с печатью PDF, содержащего несколько этикеток, на различных хостах и принтерах.На некоторых хостах мое приложение печатает много пустых страниц, но на других все работает нормально.Я не могу понять почему.У меня нет нулевых исключений или чего-то еще.
- на хосте с Linux и JRE10 с сетевым принтером, мое приложение работает правильно.Он отлично печатает одну страницу формата А4.
- на том же хосте, что и выше, но на Windows 7 и JRE10 (я пробовал также с JRE8, все еще ничего) и на том же сетевом принтере мое приложение печатает много пустых / пустых страниц.(та же сеть, принтер и хост, как указано выше)
- , поэтому я протестировал другой хост Windows 10 с JRE10 и тем же сетевым принтером, как указано выше.Приложение печатает много пустых / пустых страниц.
- на другом хосте с Windows 7 и JRE8, но на другом сетевом принтере мое приложение печатает правильно этикетки.Он отлично печатает одну страницу формата A4.
- на другом хосте с Windows 7 и JRE8, а другое приложение сетевого принтера печатает пустые страницы.
В чем может быть проблема?Это нестабильная JRE или мой код неверен?
Код:
public static String printPdf(byte[] pdf){
log.debug("printPdf(byte["+pdf.length+"])");
log.info("All printers:"+ Printer.getAllPrinters());
PrinterJob printerJob = PrinterJob.createPrinterJob();
if(printerJob==null){
log.warn("No priters were found in system");
return "[E:2]";
}
Printer printer = null;
if(printerJob.showPrintDialog(null))
{
log.info("Selected printer " + printerJob.getPrinter().getName());
printer = printerJob.getPrinter();
}
DocFlavor docType = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(MediaSizeName.ISO_A4);
PrintService[] pservices = PrintServiceLookup.lookupPrintServices(null, aset);
String pserv = Arrays.stream(pservices).map(printService -> printService.getName()).collect(Collectors.joining(", "));
log.debug("Available print services:" + pserv);
DocPrintJob docPrintJob = null;
for(PrintService ps : pservices){
log.debug("PrintSevice: "+ps.getName());
if(ps.getName()==printer.getName()){
log.info("Serviece for a printer was founded");
docPrintJob = ps.createPrintJob();
}
}
if (docPrintJob!=null) {
log.debug("Created DocPrintJob: " +docPrintJob.getAttributes().toString());
try {
Doc doc = new SimpleDoc(new ByteArrayInputStream(pdf), docType, null);
log.info("Printing document");
docPrintJob.print(doc, aset);
} catch (PrintException e) {
log.error("PrintException", e.getMessage(), e);
return "[E:3]";
}
}else {
log.error("Null DocPrintJob");
return "[E:4]";
}
return "OK";
}