java打印空白页_java - DocPrintJob在随机主机上打印空白页 - 堆栈内存溢出

本文讨论了一个Java应用程序在特定主机和JRE版本上打印PDF时遇到的问题,即在某些环境下打印出空白页。问题出现在Windows 7和JRE10/8上,而Linux环境下则正常。代码示例展示了如何使用PrinterJob进行打印操作,但并未找出导致空白页的根本原因。可能的原因包括不稳定的JRE或代码错误。
摘要由CSDN通过智能技术生成

我在各种主机和打印机上打印包含某些标签的PDF时遇到问题。 在某些主机上,我的应用程序打印了许多空白页,但在其他主机上,一切正常。 我不知道为什么。 我没有任何空异常或其他东西。

在装有Linux和带有网络打印机的JRE10的主机上,我的应用程序正常运行。 它正在完美地打印一张A4页。

在与上述相同的主机上,但在Windows 7和JRE10上(我也尝试过使用JRE8,仍然没有尝试),并且同一台网络打印机上,我的应用程序正在打印许多空白/空白页。 (与上述网络,打印机和主机相同)

因此,我测试了另一台具有JRE10和上述网络打印机的Windows 10主机。 应用程序正在打印许多空白/空白页。

在其他装有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";

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值