我一直在尝试确定打印机是否能够打印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文件here,您可以使用它们。
发布于 2012-01-19 03:08:30
(评论太长了)
我的最终目标是确定打印机是否支持Postscript
如果你想通过编程来确定它,那么下面的可能不会有很大的帮助,但是...
Postscript我看过文档,但无法确定LaserJet P4014N是否支持
。
如果打印机本身使用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支持的问题)。
发布于 2012-01-19 02:48:56
我不熟悉Java SE打印环境。然而,只要看看PrintServiceLookup API docs,我就想知道您为什么要使用PrintServiceLookup.lookupDefaultPrintService()。这将为您提供环境首选的PrintService。看起来PrintServiceLookup.lookupPrintServices(DocFlavor flavor, AttributeSet attributes)会让你指定你喜欢的PrintService。
DocFlavor documentation说您可以指定一个"application/postscript“的MIMEtype,以指示系统给出一个接受PostScript语言数据的PrintService。
实际上,似乎有一个预定义的DocFlavour.BYTE_ARRAY POSTSCRIPT类,它可能是一个对您有用的参数。
https://stackoverflow.com/questions/8915360
复制相似问题