如何解决使用 java 打印时风格无效
我试图像这样用 java 打印文档:
但在某些计算机中它给我错误:
INFO: Got an exception.
sun.print.PrintJobFlavorException: invalid flavor
在这一行:
job.print(doc,attrs);
这是代码:
public void printFiles(ArrayList<ByteArrayInputStream> files) throws PrintException,IOException {
Native.loading.setText(Constants.PRINT_LOADING);
long startTime = System.currentTimeMillis();
PrintService[] services = PrintServiceLookup.lookupprintServices(null,null);
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
attrs.add(Sides.DUPLEX);
attrs.add(new JobName(Constants.PRINT_JOB_NAME,null));
long endTime = System.currentTimeMillis();
double totalTime = (endTime - startTime) / 1000.0;
logger.info("PrintFiles time 1: " + totalTime);
DocFlavor[] flavors = service.getSupportedDocFlavors();
for(int i=0; i<flavors.length; i++)
{
logger.info("flavor " + i + ": " + flavors[i].toString());
}
logger.info("curFlavor: " + DocFlavor.INPUT_STREAM.AUTOSENSE.toString());
if(service != null)
{
logger.info("Default Printer: " + service.getName());
startTime = System.currentTimeMillis();
PrintService selection = ServiceUI.printDialog(null,200,services,service,null,attrs);
endTime = System.currentTimeMillis();
totalTime = (endTime - startTime) / 1000.0;
logger.info("PrintFiles time 2: " + totalTime);
startTime = System.currentTimeMillis();
if(selection != null)
{
logger.info(selection.getName());
for(int i=0; i<files.size(); i++)
{
ByteArrayInputStream file = files.get(i);
DocPrintJob job = selection.createPrintJob();
Doc doc = new SimpleDoc(file,DocFlavor.INPUT_STREAM.AUTOSENSE,null);
job.addPrintJobListener(new PrintListener());
job.print(doc,attrs);
if(file != null)
file.close();
}
}
endTime = System.currentTimeMillis();
totalTime = (endTime - startTime) / 1000.0;
logger.info("PrintFiles time 3: " + totalTime);
}
}
我尝试打印我的计算机(可以工作)和另一台计算机(无法工作)支持的所有口味。
这是工作计算机支持的口味:
INFO: flavor 0: image/gif; class="[B"
INFO: flavor 1: image/gif; class="java.io.InputStream"
INFO: flavor 2: image/gif; class="java.net.URL"
INFO: flavor 3: image/jpeg; class="[B"
INFO: flavor 4: image/jpeg; class="java.io.InputStream"
INFO: flavor 5: image/jpeg; class="java.net.URL"
INFO: flavor 6: image/png; class="[B"
INFO: flavor 7: image/png; class="java.io.InputStream"
INFO: flavor 8: image/png; class="java.net.URL"
INFO: flavor 9: application/x-java-jvm-local-objectref; class="java.awt.print.Pageable"
INFO: flavor 10: application/x-java-jvm-local-objectref; class="java.awt.print.Printable"
INFO: flavor 11: application/octet-stream; class="[B"
INFO: flavor 12: application/octet-stream; class="java.net.URL"
INFO: flavor 13: application/octet-stream; class="java.io.InputStream"
INFO: flavor 14: application/postscript; class="[B"
INFO: flavor 15: application/postscript; class="java.io.InputStream"
INFO: flavor 16: application/postscript; class="java.net.URL"
这是不工作的计算机中的味道:
INFO: flavor 0: application/x-java-jvm-local-objectref; class="java.awt.print.Pageable"
INFO: flavor 1: application/x-java-jvm-local-objectref; class="java.awt.print.Printable"
我想知道为什么我的打印机只有两种口味?这台打印机在这台计算机上工作正常,除了 java 应用程序。 如何修复此代码以适用于所有打印机?
tnx
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。