0 0

JAVA 连接打印机 打印作业属性设置无效果问题 5

各位好:
我现在在做一个用JAVA 发送打印文件 到打印机上的项目但是我现在遇到一些问题,希望大家给点思路,谢谢。
  
《疑问一》  
FileInputStream psStream;
try {
      psStream = new FileInputStream("file.ps");
}    catch (FileNotFoundException ffne) {
}
if (psStream == null) {
    return;
}

  DocFlavor psInFormat = DocFlavor.INPUT_STREAM.POSTSCRIPT;
  Doc myDoc = new SimpleDoc(psStream, psInFormat, null); 
  PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();

  aset.add(new Copies(5));
  aset.add(Sides.DUPLEX);

  PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, aset);

  if (services.length > 0) {
   DocPrintJob job = services[0].createPrintJob();
   try {
        job.print(myDoc, aset);
   } catch (PrintException pe) {}
}
  
首先我 电脑上 装了 4 到 5 个 不同厂商 的打印机驱动

上面的这段代码我是从JDK 1.7 API 上拷贝下来的, 我 运行时 发现 返回的 services 为空,即没有找到适合条件的 打印服务,
但是我装的这几个打印机 的驱动是支持  多份 ,双面打印的啊 ?

如果我把   
   aset.add(new Copies(5));
   aset.add(Sides.DUPLEX);
这两行代码删掉, 那么就可以找到 我装的那4,5 个打印服务了。

这是疑问一


《疑问二》
  
   File file=new File("D:\\1.pdf");
 
   PrintRequestAttributeSet pras1 = new HashPrintRequestAttributeSet();
   DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
 
   InputStream in= new FileInputStream(file);//这里的file是已经生成的PDF
   
   PrintService printService1[]= PrintServiceLookup.lookupPrintServices(flavor, pras1);
 
   PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService(); //默认的PrintService
 
   PrintService service = ServiceUI.printDialog(null, 200, 200,printService1, defaultService, flavor, pras1);

   DocPrintJob pj=service.createPrintJob();

   DocAttributeSet das = new HashDocAttributeSet();


    pras1.add(new Copies(2));

    pras1.add(PrintQuality.HIGH);

    pras1.add(Sides.DUPLEX);
   
    pras1.add(new JobName("E2",null));
   
    das.add(PrintQuality.HIGH);

    das.add(Sides.DUPLEX);
   
     Doc doc1=new SimpleDoc(in,flavor,das);
     pj.print(doc1, pras1);

     上面这段代码是我自己写的, 首先 PDF文件可以发到打印机 打印出来,但是, 诸如  我设置的
      pras1.add(new Copies(2));

      pras1.add(PrintQuality.HIGH);

      pras1.add(Sides.DUPLEX);
   
      pras1.add(new JobName("E2",null));


       das.add(PrintQuality.HIGH);

       das.add(Sides.DUPLEX);

文件始终 打印出来的 都是  1 份 , 单面打印, 这个是疑问 2 , 我猜想,是不是 JAVA 设置的这些打印 属性在 调用打印机驱动的时候, 没有能够将这些属性传递给打印机?还有 JAVA 的这些属性设置 是不是在不同厂商 开发的打印机打印机驱动 不一定有效果?

小弟现在正在疑惑中,希望有经验的朋友可以指点一下,谢谢。
   
2012年1月06日 14:14
目前还没有答案

相关推荐

Global site tag (gtag.js) - Google Analytics