虽然有几个关于托盘选择的问题,但没有一个与我的问题有关。Java印花托盘选择佐贺
下面是我用打印的代码:
private static void finalPrint(PDDocument pdoc, boolean pbStationary)
throws BigBangJewelException
{
PrintService lrefSvc;
PrinterJob lrefPJob;
Media lrefMedia;
HashPrintRequestAttributeSet lobjSet;
lrefSvc = getPrinter();
lrefPJob = PrinterJob.getPrinterJob();
try
{
lrefPJob.setPrintService(lrefSvc);
lrefPJob.setPageable(pdoc);
lrefMedia = null;
if (pbStationary)
lrefMedia = getTray(lrefSvc);
if (lrefMedia != null)
{
lobjSet = new HashPrintRequestAttributeSet();
lobjSet.add(lrefMedia);
lrefPJob.print(lobjSet);
}
else
lrefPJob.print();
}
catch (Throwable e)
{
throw new BigBangJewelException(e.getMessage(), e);
}
}
private static PrintService getPrinter()
throws BigBangJewelException
{
String lstrPrinter;
PrintService[] larrServices;
int i;
try
{
lstrPrinter = (String)Engine.getUserData().get("Printer");
larrServices = PrinterJob.lookupPrintServices();
for (i = 0; i < larrServices.length; i++)
{
if (larrServices[i].getName().indexOf(lstrPrinter) != -1)
return larrServices[i];
}
}
catch (Throwable e)
{
throw new BigBangJewelException(e.getMessage(), e);
}
throw new BigBangJewelException("Impressora definida (" + lstrPrinter + ") não encontrada.");
}
private static Media getTray(PrintService prefSvc)
{
Media[] larrMedia;
String lstrAux;
int i;
larrMedia = (Media[])prefSvc.getSupportedAttributeValues(Media.class, null, null);
if (larrMedia == null)
return null;
for (i = 0; i < larrMedia.length; i++)
{
lstrAux = larrMedia[i].toString().toLowerCase();
if (lstrAux.contains("tray") && lstrAux.contains("3"))
{
return larrMedia[i];
}
}
return null;
}
莫明其妙的事是,曾经工作此代码。机器上有一堆Xerox打印机,代码可以正确识别想要的打印机和想要的托盘,并且一切都很好用。
然后,有一天,一夜之间,它停止工作。它仍然找到了正确的打印机,但现在,它总是打印到纸盘1
,改变是一个额外的HP打印机添加到机器的唯一的事。
我可以证实,该代码是找到托盘,并将其发送到打印作业,但它变得忽略不计。
同样,也有很多问题,在那里对这个问题,但我的问题是,代码运行良好了四年,然后停止工作,原因不明。
任何人都可以在这个问题上谈一谈?
编辑:新信息:卸载HP打印机使得施乐打印机再次正常工作。为什么安装一个驱动程序会影响Java与另一个驱动程序通信的能力?
编辑2:更多信息:如果我们安装HP全局打印机驱动程序而不是特定的打印机驱动程序,则一切正常。我将不回答这个问题,看看在赏金到期之前是否有人能够提出一个好的解释,然后我将把这个编辑作为答案并接受它。
来自例外的日志等可以是你的“光”...这个代码几乎不可能测试SO –
这是事情,没有例外。该设置只是默默的忽略。 –
我喜欢异常名称'BigBangJewelException',但是做这样的事情是没有意义的:'抛出新的BigBangJewelException(e.getMessage(),e);'。简单地省略第一个参数。 –