Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确定Postscript打印支持_Java_Printing_Postscript_Printers_Thermal Printer - Fatal编程技术网

Java 确定Postscript打印支持

Java 确定Postscript打印支持,java,printing,postscript,printers,thermal-printer,Java,Printing,Postscript,Printers,Thermal Printer,我一直在尝试确定打印机是否能够打印Postscript(.ps)文件。使用以下方法,我尝试确定打印机是否可以使用以下代码打印Postscript: private void findPrinters( DocFlavor flav ) { PrintService[] services = PrintServiceLookup.lookupPrintServices( flav, null ); System.out.println( flav ); if ( services !

我一直在尝试确定打印机是否能够打印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 Universal Print Driver for Windows PostScript”后,
Win32打印机: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,如果它没有将Postscript转换为JPG(分辨率降低,但源文件确实有图像),然后打印出来。如果您对将Postscript文件打印到不支持Postscript的打印机有任何建议,我很乐意听听!如果您需要更多信息,请告诉我


我找到了一些您可以使用的Postscript示例文件。

我不熟悉Java SE打印环境。但是,只要看看,我想知道为什么要使用
PrintServiceLookup.lookupDefaultPrintService()
。这将为您提供环境更喜欢的PrintService。似乎,
PrintServiceLookup.lookupPrintServices(DocFlavor,AttributeSet attributes)
可以让您指定您喜欢的PrintService

说明您可以指定一个MIMEtype“
application/postscript
”来指示系统为您提供一个接受postscript语言数据的PrintService

事实上,似乎有一个预定义的类,它可能是对您有用的参数。

(这对于注释来说太长了)

我的最终目标是确定打印机是否支持Postscript

如果您想以编程方式确定它,那么以下内容可能没有很大帮助,但是

我查看了文档,但无法确定LaserJet是否 P4014N是否支持Postscript

当打印机本机使用PostScript并且您拥有打印机的IP时,您不需要驱动程序:您只需将PostScript文件发送到打印机,打印机就可以打印它

例如,在我的家庭办公室中,我有一台在本地IP 10.0.0.44上支持PostScript的HP打印机,我可以通过以下命令行将.ps文件打印到该打印机:

cat test.ps | netcat 10.0.0.44  9100

现在我知道这不是对你问题的回答(因此评论太长了),但是如果你这样做(或者直接从Java发送文件,而不使用任何驱动程序),并且打印机正确打印PostScript文件,那么你就可以确定打印机确实以本机方式讲PostScript(这可能会帮助您解决Java/PostScript支持问题)。

顺便说一句,不要问我为什么要使用cat然后netcat:我这么做已经很久了,这已经成为一种习惯。还要注意的是,型号并不总是足以确定您是否使用本机PostScript。举个例子,您有很多好的老版本(令人惊讶)LaserJet 4+已收到一个模块,允许他们以本机方式渲染PostScript,但默认情况下,4+不支持PostScript(与4M+相反:他们从一开始就支持PostScript)。这似乎是一种更容易测试的方法,但我确实需要通过编程知道打印机是否支持Postscript,因为我不能期望最终用户做同样的事情。@nevets129:是的,我猜是这样,这就是为什么我提到它不是答案:(至少它可以帮助您确定您提到的打印机是否支持本机PostScript:)进行实际打印的第二段代码使用默认打印机,我手动将其更改为正在测试的打印机。第一段代码告诉我打印机是否支持PostScript。