2

I am facing java.awt.print.PrinterException: Printer is not accepting job..Exception in my jsp page when sending documents to print dyanamically................

          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...");

whats going wrong ?

4

2 に答える 2

2

これによると:openjdkのバグは、ライブラリの印刷でのエラーであり、いくつかのオプションがあります:

  1. エラーが修正された別の JRE を使用します。
  2. スローされなくなるまで印刷を繰り返します。同様の問題を抱えている人は、最初の繰り返しでうまくいくことが多いと言います。
  3. ここからハックを使用してください: hack、 ForcedAcceptPrintService クラスを参照してください
于 2015-07-24T07:45:40.600 に答える
0

失敗したこと

私は以前、Piro の 3 番目の提案から解決策を試みましたが、後続の投稿者 (投稿 #10) が経験したのと同じエラーを受け取りました。

何が機能したか

Win32PrintService getPrinterIsAcceptingJobs() メソッドを上書きして、常に「ACCEPTING_JOBS」のステータスを返すバイトコード ハックを実行しました。これは私のニーズにぴったりでした。プリンターは常に使用可能であると見なされ、実際にオフラインであっても、オンラインに戻るたびに印刷ジョブがキューに入れられます。Java 7 でコンパイルしているので、別の方法でしなければならなかった唯一のことは、GitHub から古いバージョンのJavassist (3.18) を入手することでした。Java 8 でビルドされた最新バージョン (3.20) でコンパイルしようとすると、私に次のエラー:

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. PrintServiceFixer.jar を <JAVA_HOME>\jre\lib\target から、プログラムのライブラリ/JAR ファイルを保存するディレクトリにコピーしました。

  5. プログラムを実行しました

    java -jar -Xbootclasspath/p:path\to\my\program's\libs\PrintServiceFixer.jar MyPrintingProgram.jar
    
于 2016-05-26T23:30:25.287 に答える