2013-07-17 81 views
2

我面临java.awt.print.PrinterException:打印机在发送文档以打印dyanamically时,在我的jsp页面中不接受job..Exception ..... ...........java.awt.print.PrinterException:打印机不接受作业

  String pdfFile = "D://Records.pdf"; 
      boolean silentPrint = false; 
      String printerindx = "1"; 
      String password = ""; 

      PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService(); 

      if (pdfFile == null) { 
       System.out.println("No PDF file available"); 
      } 

      PDDocument document = null; 

      try { 
       document = PDDocument.load(pdfFile); 
       if (document.isEncrypted()) { 
        document.decrypt(password); 
       } 
       PrinterJob printJob = PrinterJob.getPrinterJob(); 

       if (printerindx != null) { 
        PrintService[] printServices = PrinterJob.lookupPrintServices(); 
        for (PrintService printService : printServices) { 
         if (printService.getName().equals("HP LaserJet P1007") { 
          System.out.println("Printer found ...."); 
          printJob.setPrintService(printService); 
          System.out.println(printService); 
         } 
        } 
       } 

        document.print(printJob); 

      } finally { 
       if (document != null) { 
        document.close(); 
       } 
      } 

      System.out.println("Printing Completed..."); 

怎么了?

+2

那么想必打印机没有接受这份工作......很难知道该说超出了什么。有可能你的JSP运行的用户(当然是在*服务器*端)没有访问打印机的权限...... –

回答

2

根据这样的:openjdk bug它是在印刷库的错误,你有一些选择:

  1. 使用不同的JRE,即,错误是固定的。
  2. 重复打印,直到不会抛出,有类似问题的人说它经常在第一次重复上工作。
  3. 使用从这里砍:hack,看ForcedAcceptPrintService类
0

什么失败

我以前试图从毗卢的第三项建议的解决方案,但我收到了同样的错误将后面的海报(经验#10)。

什么工作

我进行bytecode hack,其覆盖Win32PrintService getPrinterIsAcceptingJobs()方法总是返回的状态 “ACCEPTING_JOBS。”这完全符合我的需求:打印机总是被视为可用,即使它实际上处于脱机状态,打印作业也会排队返回到联机状态。我唯一不同的做法是从GitHub获取旧版本的​​(3.18),因为我正在编译Java 7.试图用最新版本(3.20)编译 - 它是用Java 8编译的 - 给出了我下面的错误:

java.lang.UnsupportedClassVersionError: sun/print/Win32PrintService : Unsupported major.minor version 52.0

对于其他人不熟悉,必须先创建PrintServiceFixer.jar合辑,下面是我所采取的步骤:

  1. 复制javassist.jar到<JAVA_HOME> \ jre \ lib \ ext
  2. 编译Win32PrintServiceFixer.java(从内<JAVA_HOME> \ JRE \ lib中)

    javac -classpath .\rt.jar -bootclasspath ext\javassist.jar Win32PrintServiceFixer.java 
    
  3. 创建PrintServiceFixer.jar文件:

    java -cp .;.\ext\javassist.jar Win32PrintServiceFixer 
    
  4. 从<复制PrintServiceFixer.jar JAVA_HOME > \ jre \ lib \ target到存储我的程序库的目录/ JAR文件。

  5. 然我的程序

    java -jar -Xbootclasspath/p:path\to\my\program's\libs\PrintServiceFixer.jar MyPrintingProgram.jar