无法使用Java打印机打印文档服务(JPS)

问题描述:

我已经实现了一个程序,使用IP地址,打印机名称将文档打印到特定的打印机,并且运行良好,没有任何错误和异常。正在从java发送打印机作业,我可以在本地打印机打印池中看到此信息,但该页面未在打印机上打印。无法使用Java打印机打印文档服务(JPS)

URI myURI=null; 
FileInputStream psStream=null; 
try { 
    psStream = new FileInputStream("sample.doc"); 
} 
catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} 
DocFlavor psInFormat = DocFlavor.BYTE_ARRAY.GIF; 
Doc myDoc = new SimpleDoc(psStream, psInFormat, null); 
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, aset); 
if (services.length > 0) { 
    DocPrintJob job = services[0].createPrintJob();   
    try { 
     job.print(myDoc, aset); 
    } 
    catch (PrintException e){ 
    } 
} 

你能帮我解决吗?

感谢, SRIKANTH Chilukuri


我发现这个问题。

psStream = new FileInputStream("sample.doc");  

上述语句创建问题。因为它是MS Word应用程序,所以无法使用文件输入流来读取文件。

我正在使用POI jar并阅读文档。

POIFSFileSystem psStream = new POIFSFileSystem(new FileInputStream(filesname)); 
Doc myDoc = new SimpleDoc(psStream, psInFormat, null); 

但文件API不supporing得到抛出:IllegalArgumentException

Exception in thread "Main Thread" java.lang.IllegalArgumentException: data is not of declared type 
    at javax.print.SimpleDoc.<init>(SimpleDoc.java:82) 
    at com.src.print.TestPrint2.main(TestPrint2.java:67) 

能否请你帮我出这一点。

+1

它可能无法解决您的问题,但你不应该无视你的'PrintException'。 –

Java Print Services允许您“绘制”Swing等页面,然后将结果发送到打印机。它不具有Word格式或HTML页面或类似知识。

因此,您需要一个知道如何将doc文件的内容绘制到打印机的模块来执行此操作。我个人没有这方面的经验。

感谢您的回复

我想你是在谈论AWT打印。这与Java Print Service不同。你可以有已预格式化,利用各种使用Java打印服务(JPS)选择打印文本数据

http://docs.oracle.com/javase/1.5.0/docs/guide/jps/spec/docflavor.fm1.html#998469

的问题出现在当文件使用UTF-8编码,并试图把它打印出来使用JPS如果它是一个正常的ASCII文件,则为 。它得到正确打印