java打印文件

来源:互联网 发布:日本留学 知乎 编辑:程序博客网 时间:2024/05/22 04:33
打印文件

  1、应用场景


  在很多实际应用情况下,我们可能都需要打印用户指定的某一个文件。该文件可能是图形文件,如GIFJPEG等等;也可能是文本文件,如TXTJava文件等等;还可能是复杂的PDFDOC文件等等。那么对于这样的打印需求,我们又应该如何实现呢?


  2、解决方法


  基本思路:在jdk1.4以前的版本,要实现这样的打印功能将非常麻烦和复杂,甚至是难以想象的。但幸运的是,jdk1.4的打印服务API提供了一整套的打印文件流的类和方法。利用它们,我们可以非常方便快捷地实现各式各样不同类型文件的打印功能。下面给出一个通用的处理方法。


  /*打印指定的文件
*/
  
private void printFileAction() {
  //构造一个文件选择器,默认为当前目录

  
JFileChooser fileChooser = new JFileChooser(SystemProperties.USER_DIR);
  int state = fileChooser.showOpenDialog(this); //弹出文件选择对话框

  if (state == fileChooser.APPROVE_OPTION) //如果用户选定了文件

  
{
  File file = fileChooser.getSelectedFile(); //获取选择的文件

  //构建打印请求属性集

  
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
  //设置打印格式,因为未确定文件类型,这里选择
AUTOSENSE
  
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
  //查找所有的可用打印服务

  
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
  //定位默认的打印服务

  
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
  //显示打印对话框

  
PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, flavor, pras);
  
if (service != null) {
   
try {
    DocPrintJob job = service.createPrintJob(); //创建打印作业

    FileInputStream fis = new FileInputStream(file); //构造待打印的文件流

    
DocAttributeSet das = new HashDocAttributeSet();
    Doc doc = new SimpleDoc(fis, flavor, das); //建立打印文件格式

    job.print(doc, pras); //进行文件的打印

   
}
   
catch(Exception e) {
    
e.printStackTrace();
   
}
  
}
  
}
  
}

  在上面的示例中,因尚未确定文件的类型,所以将指定文件的打印格式定义为DocFlavor.INPUT_STREAM.AUTOSENSE。事实上,如果在进行打印之前,就已确定地知道文件的格式,如为GIF,就应定义为DocFlavor.INPUT_STREAM.GIF ;如为PDF,就应该定义为DocFlavor.INPUT_STREAM.PDF;如为纯ASCII文件,就可以定义为 DocFlavor.INPUT_STREAM.TEXT_HTML_US_ASCII。等等。