我一直在试图确定打印机是否能够打印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)。安装“适用于Windows PostScript的HP通用打印驱动程序”后,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);
这将在后记功能的打印机正确打印以及网络打印机之一(一Java说的HP LaserJet P4014N)没有Postscript支持。在我的收据打印机上,它将打印Postscript文件,就像它只是文本一样。有人向我建议,网络打印机没有正确响应Java(通用驱动程序等),并且它实际上可以支持Postscript。我查看过文档,但无法确定LaserJet P4014N是否支持Postscript。我确实找到另一台打印机(HP Laserjet 2055dn),并通过USB连接到我的电脑,Java仍然报告说它不支持Postscript,尽管能够使用上述方法打印它。
也许我做错了什么?如果不是,我该如何正确检测打印机是否支持Postscript?我的最终目标是确定打印机是否支持Postscript,如果它不将Postscript转换为JPG(分辨率损失,但源代码有图像)并打印出来。如果您有任何关于将Postscript文件打印到不支持Postscript功能的打印机的建议,我很乐意听到它!如果您需要更多信息,请告诉我。
我发现了一些样品Postscript文件here,你可以使用。
执行实际打印的第二块代码使用默认打印机,我手动将其更改为要测试的打印机。第一块代码是告诉我打印机是否支持Postscript。 – nevets1219 2012-01-18 19:10:38