我正面临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...");
什么出错?
答案 0 :(得分:2)
根据这个:openjdk bug打印库时出错,你有一些选择:
答案 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所需编辑的人,以下是我采取的步骤:
编译Win32PrintServiceFixer.java(来自< JAVA_HOME> \ jre \ lib)
javac -classpath .\rt.jar -bootclasspath ext\javassist.jar Win32PrintServiceFixer.java
创建了PrintServiceFixer.jar文件:
java -cp .;.\ext\javassist.jar Win32PrintServiceFixer
将< JAVA_HOME> \ jre \ lib \ target中的PrintServiceFixer.jar复制到我存储程序的库/ JAR文件的目录。
< / LI>离开我的计划
java -jar -Xbootclasspath/p:path\to\my\program's\libs\PrintServiceFixer.jar MyPrintingProgram.jar