Хотя есть несколько вопросов относительно выбора лотка, ни одна из них не связана с моей проблемой.Выбор лотка для печати в формате Java Saga
Вот код, я использую для печати:
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 заставила принтеры Xerox работать снова. Почему установка одного драйвера влияет на способность Java связываться с другим драйвером?
Редакция 2: Дополнительная информация: Если мы устанавливаем глобальный драйвер принтера HP вместо конкретного драйвера принтера, все работает правильно. Я оставлю вопрос без ответа, чтобы узнать, может ли кто-нибудь придумать хорошее объяснение до того, как истекает срок, и я отправлю это изменение в ответ и приму его.
Журналы исключений и т. Д. Могут быть вашими «легкими» ...этот код почти невозможно проверить для людей из SO –
Это то, что нет исключений. Настройка просто игнорируется. –
Мне нравится имя исключения 'BigBangJewelException', но совершенно бессмысленно делать что-то вроде этого:' throw new BigBangJewelException (e.getMessage(), e); '. Просто опустите первый аргумент. –