Определение поддержки печати Postscript - PullRequest
3 голосов
/ 18 января 2012

Я пытался определить, способен ли принтер печатать файл Postscript (.ps).Используя следующий метод, я попытался определить, может ли принтер напечатать 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 здесь , которые вы могли бы использовать.

Ответы [ 2 ]

2 голосов
/ 18 января 2012

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

Моя конечная цель - определить, поддерживает ли принтер 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 голосов
/ 18 января 2012

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

В документации DocFlavor говорится, что вы можете указать MIME-тип "application/postscript", чтобы указывать системе предоставить вам PrintService, который принимает данные языка PostScript.

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

...