Java 确定Postscript打印支持
我一直在尝试确定打印机是否能够打印Postscript(.ps)文件。使用以下方法,我尝试确定打印机是否可以使用以下代码打印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 !
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。