【发布时间】:2012-01-13 12:31:21
【问题描述】:
我遇到的问题是,当您在 Windows 中尝试通过 JAVA 打印时,您只能使用 AUTOSENSE 属性。 但是,我想要打印的字符串是希腊语 => UTF-8。当我将 AUTOSENSE 设置为 TEXT_PLAIN_UTF8 时,我得到一个:sun.print.PrintJobFlavorException: invalid flavor exception....
有什么建议吗?或其他以 Unicode 打印的方式? 谢谢!
String datastr = "UNICODE STRING";
byte[] databa = null;
try {
databa = datastr.getBytes("UTF8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
DocFlavor docFlavor = DocFlavor.BYTE_ARRAY.TEXT_PLAIN_UTF_16;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
if (databa != null) {
DocPrintJob pjob = service.createPrintJob();
Doc doc = new SimpleDoc(databa, docFlavor, null);
try {
pjob.print(doc, aset);
} catch (PrintException e) {
e.printStackTrace();
}
如果我尝试在 STRING.TEXT_PLAIN 以及除 AUTOSENSE 之外的所有内容中打印它,我会得到:
sun.print.PrintJobFlavorException: invalid flavor
at sun.print.Win32PrintJob.print(Unknown Source)
最后支持的Flavor是这些...
Win32 Printer : HP Deskjet 5440 Series Flavors:
image/gif; class="[B"
image/gif; class="java.io.InputStream"
image/gif; class="java.net.URL"
image/jpeg; class="[B"
image/jpeg; class="java.io.InputStream"
image/jpeg; class="java.net.URL"
image/png; class="[B"
image/png; class="java.io.InputStream"
image/png; class="java.net.URL"
application/x-java-jvm-local-objectref; class="java.awt.print.Pageable"
application/x-java-jvm-local-objectref; class="java.awt.print.Printable"
application/octet-stream; class="[B"
application/octet-stream; class="java.net.URL"
application/octet-stream; class="java.io.InputStream"
【问题讨论】:
-
我们不得不猜测,因为您没有包含完整的堆栈跟踪。首先,您使用的是 UTF-8,但您的示例使用的是
TEXT_PLAIN_UTF_16。相反,您应该尝试...UTF_8枚举。另外,您是否在原始字符串上尝试了DocFlavor docFlavor = DocFlavor.STRING.TEXT_PLAIN;,绕过了整个显式的 UTF-8 字节数组转换?如果错误仍然存在,那么问题在于您没有向我们展示的内容。 -
出于某种原因,我不能在 Windows 中使用纯文本字符串选项。
标签: java windows unicode printing utf-8