java.awt.print.PrinterException:打印机不接受作业

时间:2013-07-17 08:23:17

标签: java jsp servlets

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

          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 个答案:

答案 0 :(得分:2)

根据这个:openjdk bug打印库时出错,你有一些选择:

  1. 在错误修复的地方使用不同的JRE。
  2. 重复打印直到它不会抛出,有类似问题的人说它经常在第一次重复时工作。
  3. 使用此处的hack:hack,请参阅ForcedAcceptPrintService类

答案 1 :(得分:0)

失败的原因

我之前尝试过Piro的第三个建议解决方案,但我收到了后续海报(第10条)经历过的相同错误。

工作成就

我执行了bytecode hack,它覆盖了Win32PrintService getPrinterIsAcceptingJobs()方法,以便始终返回状态为" ACCEPTING_JOBS。"这完全符合我的需求:打印机始终被视为可用,即使它实际上处于脱机状态,打印作业也会在重新联机时排队等候。我唯一不得不做的就是从GitHub中获取Javassist(3.18)的旧版本,因为我正在使用Java 7进行编译。尝试使用最新版本(3.20)进行编译 - 这是构建的使用Java 8 - 给了我以下错误:

  

java.lang.UnsupportedClassVersionError:sun / print / Win32PrintService:不支持的major.minor版本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. 将< JAVA_HOME> \ jre \ lib \ target中的PrintServiceFixer.jar复制到我存储程序的库/ JAR文件的目录。

    < / LI>
  5. 离开我的计划

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