PDF Java print: задание отправлено в очередь заданий принтера, но ничего не печатается
Я пытаюсь распечатать документ PDF.
Я вижу задание в очереди принтера, а затем вижу, что оно исчезает, как если бы принтер завершил свою работу.
Но проблема в том, что ничего не печатает. Я не могу понять, что не так в моем коде.
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null,null);
PrintService service = null;
for (String imprimante : listImprimantes){
for( PrintService printService : printServices ) {
Attribute[] attrs = printService.getAttributes().toArray();
for (int j=0; j<attrs.length; j++) {
String attrName = attrs[j].getName();
String attrValue = attrs[j].toString();
if (attrName.equals("printer-info")){
if (attrValue.equals(imprimante)){
service = printService;
DocFlavor[] flavors = service.getSupportedDocFlavors();
break;
}
}
}
}
}
InputStream fi = new ByteArrayInputStream(baos.toByteArray());
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
DocPrintJob printJob = service.createPrintJob();
Doc doc = new SimpleDoc(fi, flavor, null);
try {
if (doc != null) {
printJob.print(doc, null);
}
}
catch (PrintException e1) {
log.debug(e1.getMessage());
}
Если кто-нибудь может помочь мне в этом...
1 ответ
Я знаю, что уже поздно отвечать, но, поскольку у меня была та же проблема, я думаю, что это может помочь другим опубликовать мое решение.
Я сталкивался с этой проблемой в Windows (7), но не в Linux (Fedora), поэтому первым делом я проверил установку драйверов.
Затем я увидел, что PDF-файлы не обрабатываются многими принтерами. Это принято, но ничего не напечатано. Из этого можно выбрать несколько решений:
- Преобразуйте PDF в PS или что-то подобное перед отправкой на принтер.
- Используйте стороннюю библиотеку, например Apache PdfBox (текущая версия 2.0.2).
Я выбрал решение 2, и оно работает как шарм. Приятно то, что он также использует PrintService с атрибутами, так что вы можете работать со страницами, лотками принтера и множеством опций.
Вот часть моего кода:
private boolean print(PrintService printService, InputStream inputStream, PrintRequestAttributeSet attributes)
throws PrintException {
try {
PDDocument pdf = PDDocument.load(inputStream);
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintService(printService);
job.setPageable(new PDFPageable(pdf));
job.print(attributes);
pdf.close();
} catch (PrinterException e) {
logger.error("Error when printing PDF file using the printer {}", printService.getName(), e);
throw new PrintException("Printer exception", e);
} catch (IOException e) {
logger.error("Error when loading PDF from input stream", e);
throw new PrintException("Input exception", e);
}
return true;
}
Надеюсь это поможет.