我一直在試圖確定打印機是否能夠打印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