【问题标题】:Java Print program with Specifications issues?Java Print 程序有规范问题?
【发布时间】:2023-03-22 17:35:02
【问题描述】:

我用过这个

DocFlavor[] docFalvor = prnSvc.getSupportedDocFlavors();
        for (int i = 0; i < docFalvor.length; i++) {
            System.out.println(docFalvor[i].getMimeType());
        }

获取我打印机的 DocFlavor 并返回

image/gif
image/gif
image/gif
image/jpeg
image/jpeg
image/jpeg
image/png
image/png
image/png
application/x-java-jvm-local-objectref
application/x-java-jvm-local-objectref
application/octet-stream
application/octet-stream
application/octet-stream

和m使用

import java.io.FileInputStream;
import java.io.FileNotFoundException;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.Sides;


public class PrintFileWithSpec {


    public static void printFile(String filename){

    FileInputStream psStream=null;
    try {
       psStream = new FileInputStream(filename);
    } catch (FileNotFoundException ffne) {}

    if (psStream == null) {
        return;
    }

    DocFlavor psInFormat = DocFlavor.INPUT_STREAM.AUTOSENSE;
    Doc myDoc = new SimpleDoc(psStream, psInFormat, null);  
    PrintRequestAttributeSet aset = 
        new HashPrintRequestAttributeSet();
    aset.add(new Copies(5));
    //aset.add(MediaSize.ISO_A4); 
    aset.add(Sides.DUPLEX);
    PrintService[] services = 
      PrintServiceLookup.lookupPrintServices(psInFormat, aset);

    DocFlavor[] docFalvor = services[3].getSupportedDocFlavors();
    for (int i = 0; i < docFalvor.length; i++) {
        System.out.println(docFalvor[i].getMimeType());
    }

    if (services.length > 0) {
       DocPrintJob job = services[3].createPrintJob();
       try 
       {
           job.print(myDoc, aset);
       } catch (PrintException pe) {
  System.out.print(pe);

}
        }
        }

    public static void main(String [] args)
    {       
        printFile("D:/Resume.doc");
    }
}

服务数组为空的打印文件的代码??

当我通过 PrintServiceLookup.lookupPrintServices(null, null);

它返回所有可用的打印机,当我打印我的文档时,它给出 javax.print.PrintException: Printer is not accepting job...

【问题讨论】:

  • 当我尝试在 Eclipse 中运行您的代码时,有一个建议:不要吃掉您的异常。打印或记录它们。如果你一直吃异常,你永远不会知道发生了什么。注意空的 catch 块。不要仅仅因为没有它们代码就无法编译而使用 try/catch。
  • 它给出 javax.print.PrintException: 打印机不接受作业。
  • 所以数组不再为空了?
  • 这发生在我通过 PrintServiceLookup.lookupPrintServices(null, null);
  • 当我通过 PrintServiceLookup.lookupPrintServices(psInFormat, aset);数组为空

标签: java printing


【解决方案1】:

尝试删除和添加打印机。此外,如果 Docflavor 是 Autosense,您传递的属性集将不会生效。您要打印什么类型的文档?它在受支持的 Docflavors 中吗?如果 docflavor 不支持,则无法使用 Java Print Service API 打印 doc、pdf 等。

【讨论】:

  • 当我调试程序时 myDoc flvor key 包含 application/octet-stream; class="java.io.InputStream"
  • 嘿,当我删除它并重新读取打印机时它起作用了...:-))
  • 谢谢很多..你能告诉我我应该如何处理我想要给出规格的属性
  • 指定除 AUTOSENSE 之外的任何内容。使用 AUTOSENSE,属性不会生效。
  • 所以对于不同的文件,我每次都要传递不同的味道??
猜你喜欢
  • 2013-01-25
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
相关资源
最近更新 更多