gpt4 book ai didi

java - PDF Java 打印 : job sent in printer jobs queue but nothing prints

转载 作者:行者123 更新时间:2023-11-30 10:46:01 25 4
gpt4 key购买 nike

我正在尝试打印 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());
}

如果有人可以帮助我...

最佳答案

我知道现在回答有点晚了,但由于我遇到了同样的问题,我认为它可以帮助其他人发布我的解决方案。

我在 Windows (7) 上遇到过这个问题,但在 Linux (Fedora) 上没有遇到过,所以我的第一个 Action 是检查驱动程序设置。

然后,我看到很多打印机都没有对 PDF 进行原生处理。它被接受但没有打印任何内容。由此,可以选择几种解决方案:

  1. 在将 PDF 发送到打印机之前将其转换为 PS 或类似文件。
  2. 使用第三方库,例如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;
}

希望这对您有所帮助。

关于java - PDF Java 打印 : job sent in printer jobs queue but nothing prints,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36769482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com