2012-01-18 3 views
3

Я пытался определить, способен ли принтер печатать файл 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, которые вы могли бы использовать.

ответ

0

Я не знаком с средой печати Java SE. Однако, просто глядя на PrintServiceLookup API docs, мне интересно, почему вы используете PrintServiceLookup.lookupDefaultPrintService(). Это дает вам PrintService, который предпочитает среда. Кажется, что PrintServiceLookup.lookupPrintServices(DocFlavor flavor, AttributeSet attributes) позволит вам указать PrintService, который вы предпочитаете.

DocFlavor documentation говорит, что вы можете указать MIMEtype из «application/postscript», чтобы направить систему, чтобы предоставить вам службу печати, которая принимает данные языка PostScript.

На самом деле, как представляется, существует предопределенный класс DocFlavour.BYTE_ARRAY POSTSCRIPT, который может быть полезным для вас.

+0

Второй блок кода, который выполняет фактическую печать, использует принтер по умолчанию, который я вручную изменяю в зависимости от того, какой принтер я тестирую. Первый блок кода - это то, что говорит мне, поддерживает ли принтер Postscript или нет. – nevets1219

1

(это слишком долго для комментария)

Моя конечная цель состоит в том, чтобы определить, имеет ли принтер Postscript поддержки или не

Если вы хотите, чтобы определить его программно, то следующие, возможно, не помогут, но ...

Я просмотрел документацию, но не смог определить, поддерживает ли LaserJet P4014N Postscript или нет.

Когда принтер изначально говорит PostScript, и у вас есть IP-адрес принтера, вам не нужны драйверы: вы можете просто отправить файл PostScript на принтер, и принтер собирается его распечатать.

Например здесь на моем домашнем офисе у меня есть принтер HP с поддержкой PostScript на локальном IP 10.0.0.44 и я могу просто напечатать .ps файлов на этот принтер, выполнив из командной строки:

cat test.ps | netcat 10.0.0.44 9100 

Теперь я знаю, что это не ответ на ваш вопрос (поэтому комментарий слишком длинный для комментария), но если вы это сделаете (или отправьте файл непосредственно с Java, не используя никакого драйвера), и принтер распечатает PostScript файл, то вы можете быть уверены, что ваш принтер действительно говорит PostScript изначально (что может помочь вам устранить вашу поддержку Java/PostScript).

+0

btw не спрашивайте меня, почему я делаю * cat * then * netcat *: Я сделал это так, так как так долго, что это стало привычкой. – TacticalCoder

+0

Также обратите внимание, что номер модели не всегда достаточно, чтобы определить, есть ли у вас собственный PostScript или нет. Например, у вас много хорошего старого (удивительного) LaserJet 4+, получившего модуль, позволяющий изначально визуализировать PostScript, хотя по умолчанию 4+ не поддерживал PostScript (в отличие от 4M +: все они поддерживаемый PostScript с самого начала). – TacticalCoder

+0

Это похоже на более простой способ тестирования, но мне нужно программно узнать, поддерживает ли принтер Postscript, поскольку я не могу ожидать, что конечный пользователь сделает то же самое. – nevets1219

 Смежные вопросы

  • Нет связанных вопросов^_^