Я пытался определить, способен ли принтер печатать файл Postscript (.ps). Используя следующий метод, я попытался определить, может ли принтер печатать Postscript с помощью следующего кода:Определение поддержки печати Postscript
private void findPrinters(DocFlavor flav) {
PrintService[] services = PrintServiceLookup.lookupPrintServices(flav, null);
System.out.println(flav);
if (services != null && services.length != 0) {
System.out.println("SUPPORTED:");
for (PrintService service : services) {
System.out.println(service);
}
} else {
System.out.println("NOT SUPPORTED");
}
}
Я передал его DocFlavor.INPUT_STREAM.POSTSCRIPT
или DocFlavor.BYTE_ARRAY.POSTSCRIPT
и он будет возвращать Win32 Printer : HP LaserJet 2300L PS
и Win32 Printer : CutePDF Writer
(оба из которых являются «виртуальные» принтеры - первые использовались для создания PDF, а последний использовался для создания Postscript). После установки «Универсальный драйвер печати HP для Windows PostScript», Win32 Printer : HP Universal Printing PS
отображается как Postscript. Тем не менее, я не уверен, что этот драйвер используется или нет, поэтому я понимаю, что ни один из других подключенных принтеров не может распечатать файл Postscript.
Тогда я попытался накормить Postscript файл на несколько прикрепленных принтеров с помощью следующего кода образца:
FileInputStream in = null;
PrintService prnSvc = PrintServiceLookup.lookupDefaultPrintService();
DocPrintJob printJob = prnSvc.createPrintJob();
Doc doc;
in = new FileInputStream("some.ps");
if (prnSvc.isDocFlavorSupported(DocFlavor.INPUT_STREAM.POSTSCRIPT)) {
/* USE THIS FOR A PS-capable printer */
doc = new SimpleDoc(in, DocFlavor.INPUT_STREAM.POSTSCRIPT, null);
} else {
/* USE THIS FOR OTHER PRINTER */
doc = new SimpleDoc(in, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
}
printJob.print(doc, null);
Было бы правильно печатать на Postscript, способных принтеров, а также один из сетевых принтеров (а HP LaserJet P4014N), что Java говорит, не поддерживает Postscript. На моем принтере квитанции он будет печатать файл Postscript, как если бы это был просто текст. Мне было предложено, чтобы сетевой принтер не отвечал правильно на Java (общие драйверы и т. Д.) И мог фактически поддерживать Postscript. Я просмотрел документацию, но не смог определить, поддерживает ли LaserJet P4014N Postscript или нет. Я нашел еще один принтер (HP Laserjet 2055dn) и подключился через USB к моему компьютеру, и Java по-прежнему сообщает, что он не поддерживает Postscript, несмотря на возможность распечатать его с помощью вышеуказанного метода.
Возможно, я что-то не так? Если нет, как правильно определить, поддерживает ли принтер Postscript? Моя конечная цель - определить, поддерживает ли принтер Postscript или нет, если он не конвертирует Postscript в JPG (потеря в разрешении, но источник имеет изображения) и печатает это. Если у вас есть предложения по печати файла Postscript на принтер, не поддерживающий Postscript, я бы хотел его услышать! Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Я нашел несколько файлов Postscript here, которые вы могли бы использовать.
Второй блок кода, который выполняет фактическую печать, использует принтер по умолчанию, который я вручную изменяю в зависимости от того, какой принтер я тестирую. Первый блок кода - это то, что говорит мне, поддерживает ли принтер Postscript или нет. – nevets1219