无法使用Java打印服务打印PNG文件(其他一切正常)

无法使用Java打印服务打印PNG文件(其他一切正常),java,printing,Java,Printing,我正在使用Java打印服务打印PNG文件,但是它向打印机发送了错误的输出。实际打印的内容(当我使用PNG时)是一些文字,上面写着: ERROR: /syntaxerror in --%ztokenexec_continue-- Operand stack: --nostringval- 似乎还有更多的文字,但这是一种失去了页边距。我正在将DocFlavor设置为DocFlavor.INPUT_STREA

我正在使用Java打印服务打印PNG文件,但是它向打印机发送了错误的输出。实际打印的内容(当我使用PNG时)是一些文字,上面写着:

ERROR: /syntaxerror in --%ztokenexec_continue--
                Operand stack:
                              --nostringval-
似乎还有更多的文字,但这是一种失去了页边距。我正在将DocFlavor设置为
DocFlavor.INPUT_STREAM.PNG
,指定的文件实际上是一个
InputStream
(只需将DoccFlavor更改为
DocFlavor.INPUT_STREAM.PDF
并使用PDF文件即可)

我也尝试过使用不同的PNG文件,但问题仍然存在。就其价值而言,即使是附言似乎也在发挥作用

正在打印的错误看起来与
gd
(或ImageMagick?)错误非常相似。所以,我现在最好的假设是,从PNG->PS的转换失败了

代码如下:

PrintService printService = this.getPrintService("My printer name");

final Doc doc = new SimpleDoc(document, DocFlavor.INPUT_STREAM.PNG, null);
final DocPrintJob printJob = printService.createPrintJob();
这里,
getPrintService
获取一个打印服务,并且正在获取一个有效的打印服务。至于
文档
,我是这样得到它的:

File pngFile = new File("/home/rprabhu/temp/myprintfile.png");
FileInputStream document = new FileInputStream(pngFile);
我不知道为什么会出错,也没有看到任何错误被输出到控制台


非常感谢您的帮助。谢谢。

打印总是一件麻烦事——不可避免,因为您必须担心繁琐的细节,例如页面大小、页边空白大小以及输出需要多少页面。正如您所料,打印图像的过程与打印文本的过程不同,并且可能会增加一些具有不同功能的打印机的复杂性,因此对于某些类型的文档,您需要选择适当的打印机

请参阅以下连结:


尝试在小型swing应用程序中加载png。事实上,ImageIO.read已经可以了。或者.png是个谎言,试试DocFlavor.INPUT\u STREAM.AUTOSENSE。尝试另一个png。我尝试了另一个png(实际上,许多png是由各种程序生成的)。巴布亚新几内亚绝对不是谎言。尝试自动感知;不起作用然后DocFlavor.URL.PNG和
新URL(“文件:/…”)
可能也不起作用。作为黑客解决方案,您可以使用ImageIO.read读取图像,并使用ImageIO.write将图像写入ByteArrayOutputStream到jpg,然后使用DocFlavor.BYTE_ARRAY.JPEG。检查文件属性,可能会将文件从临时目录中复制出来。