简体   繁体   English

无法从Swing中的特定打印机打印文档

[英]Unable to print a doc from specifice printer in Swing

I am writing a code that should find list of printers on client machine and set a particulate printer for print a Doc. 我正在编写一个代码,该代码应在客户端计算机上找到打印机列表,并设置一台用于打印文档的颗粒打印机。 But I was goggling on net and I found code some think like that: 但是我在网上闲逛,发现代码有些像这样:

package org.ui;
import java.io.FileInputStream;
import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
public class Printing {
    public static void main (String [] args) {       
        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet ();       
        PrintService [] pservices = PrintServiceLookup.lookupPrintServices (flavor, aset);
        try {
            int printer = getPrinter(pservices);
            if(printer == -1) {
                throw new Exception("No network printer found");
            }
            DocPrintJob pj = pservices[0].createPrintJob();
            FileInputStream fis = new FileInputStream ("c:///file.txt");
            Doc doc = new SimpleDoc (fis, flavor, null);
            pj.print (doc, aset);
        }
        catch (Exception ex) {
            ex.printStackTrace ();
        } 
    }
    private static int getPrinter(PrintService[] pservices) {
        int printer = -1;
        for(int i = 0; i<pservices.length; i++) {
            if(pservices[i].getName().contains("\\\\")) {
                System.out.println("network printer: " + pservices[i].toString());   
                printer = i;
                break;
            }        
        }
        return printer;
    }
}

But I am unable to get print on paper, can anyone tell me whats the problem in this code? 但是我无法在纸上打印,任何人都可以告诉我这段代码有什么问题吗? Its a desktop application. 它是一个桌面应用程序。

According to the documentation of print() 根据print()文档

[...] When the print method returns, printing may not yet have completed as printing may happen asynchronously, perhaps in a different thread. [...]打印方法返回时,打印可能尚未完成,因为打印可能是异步进行的,可能是在另一个线程中进行的。 Application clients which want to monitor the success or failure should register a PrintJobListener. 想要监视成功或失败的应用程序客户端应注册一个PrintJobListener。

This means that you need to register a PrintJobListener to be able to tell what the problem is: 这意味着您需要注册一个PrintJobListener才能分辨出问题所在:

Try: 尝试:

pj.addPrintJobListener(new PrintJobListener() {
  @Override
  void printDataTransferCompleted(PrintJobEvent pje) {
    System.out.println("Transfer completed");
  }
  @Override
  void printJobCanceled(PrintJobEvent pje) {
    System.out.println("Cancelled");
  }
  @Override
  void printJobCompleted(PrintJobEvent pje) {
    System.out.println("Completed");
  }
  @Override
  void printJobFailed(PrintJobEvent pje) {
    System.out.println("Failed");
  }
  @Override
  void printJobNoMoreEvents(PrintJobEvent pje) {
    System.out.println("No more events");
  }
  @Override
  void printJobRequiresAttention(PrintJobEvent pje) {
    System.out.println("Check printer");
  }
});

before calling print() and see what gets outputed to the console 在调用print()之前,先查看输出到控制台的内容

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM