我一直在尝试确定一台打印机是否能够打印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的打印机上正确打印,也可以在一台Java表示不支持Postscript的网络打印机(HP LaserJet P4014N)上打印。但是在我的收据打印机上,它会将Postscript文件打印成文本。有人建议我,这台网络打印机没有正确响应Java(通用驱动程序等),实际上它可能支持Postscript。我查看了文档,但无法确定LaserJet P4014N是否支持Postscript。我找到了另一台打印机(HP Laserjet 2055dn),通过USB连接到我的计算机,并且用上述方法仍然无法支持Postscript。
也许我做错了什么?如果没有,如何正确检测打印机是否支持Postscript?我的最终目标是确定打印机是否具有Postscript支持,如果没有,则将Postscript转换为JPG(分辨率损失,但源代码确实包含图像)并打印。如果您对将Postscript文件打印到不支持Postscript的打印机上有任何建议,我很想听听!请让我知道是否需要其他信息。
我在此处找到了一些示例Postscript文件(链接),您可以使用它们。