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

时间:2011-08-29 06:08:38

标签: java

我已经实施了一个程序,使用IP地址,打印机名称将文档打印到特定的打印机,并且运行正常,没有任何错误和异常。正在从java发送打印机作业,我可以在本地打印机打印池上看到这个,但页面不在打印机上打印。

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 );

但Doc API并不支持获得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)

你可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

Java Print Services允许您“绘制”像Swing这样的页面,然后将结果发送到打印机。它不了解Word格式或HTML页面或类似信息。

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

答案 1 :(得分:0)

感谢您的回复

我猜你在谈论AWT打印。这与Java Print Service不同。您可以使用Java Print Service(JPS)

使用各种选项打印预格式化的文本数据

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

当使用UTF-8编码文件并尝试使用JPS打印时会出现问题 如果是普通的ASCII文件。它被正确打印