【问题标题】:PDFBox / Java: Printing to Paper:java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactoryPDFBox / Java:打印到纸上:java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory
【发布时间】:2012-08-17 04:02:24
【问题描述】:

我有一种方法可以创建 PDF 并将其保存在用户的 Documents 文件夹(当然是 Windows)中,文件名为“temp.pdf”。该方法的最后一行调用了另一个方法,该方法旨在将 pdf 文件打印到纸上。不幸的是,我收到以下错误:

线程“AWT-EventQueue-0”中的异常 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

我正在使用 PDFBox 进行打印。代码并没有太多涉及,但我无法弄清楚我做错了什么。一切都编译得很好。这是一个运行时错误。谁能看到我的错误?谢谢。

public static void printToPaper(String fPath) throws Exception {
        System.out.println("1");  //outputs correctly
        PDDocument document = new PDDocument();   //error occurs right here
        System.out.println("2");  //never appears in output queue
        document = PDDocument.load(fPath);  
        PrinterJob printJob = PrinterJob.getPrinterJob();
        PrintService[] printService = PrinterJob.lookupPrintServices();
        printJob.setPrintService(printService[0]);
        document.silentPrint( printJob );
        document.close();
    }

这是完整的错误日志:

线程“AWT-EventQueue-0”中的异常 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 在 org.apache.pdfbox.cos.COSDocument.(COSDocument.java:49) 在 org.apache.pdfbox.pdmodel.PDDocument.(PDDocument.java:125) 在kidmath.PrintPDF.printToPaper(PrintPDF.java:12) 在 Kidmath.Print.printPaper(Print.java:83) 在kidmath.JDlgPrintSettings.btnPrintMouseClicked(JDlgPrintSettings.java:271) 在 Kidmath.JDlgPrintSettings.access$600(JDlgPrintSettings.java:10) 在 Kidmath.JDlgPrintSettings$7.mouseClicked(JDlgPrintSettings.java:170) 在 java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270) 在 java.awt.Component.processMouseEvent(Component.java:6508) 在 javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 在 java.awt.Component.processEvent(Component.java:6270) 在 java.awt.Container.processEvent(Container.java:2229) 在 java.awt.Component.dispatchEventImpl(Component.java:4861) 在 java.awt.Container.dispatchEventImpl(Container.java:2287) 在 java.awt.Component.dispatchEvent(Component.java:4687) 在 java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501) 在 java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 在 java.awt.Container.dispatchEventImpl(Container.java:2273) 在 java.awt.Window.dispatchEventImpl(Window.java:2719) 在 java.awt.Component.dispatchEvent(Component.java:4687) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:703) 在 java.awt.EventQueue.access$000(EventQueue.java:102) 在 java.awt.EventQueue$3.run(EventQueue.java:662) 在 java.awt.EventQueue$3.run(EventQueue.java:660) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 在 java.awt.EventQueue$4.run(EventQueue.java:676) 在 java.awt.EventQueue$4.run(EventQueue.java:674) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:673) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:97) 引起:java.lang.ClassNotFoundException:org.apache.commons.logging.LogFactory 在 java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:423) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 39 更多

【问题讨论】:

  • 您能否发布完整的日志。某处一定有一个 ClassNotFound 异常。包括所有相关的 jar,它应该可以工作。
  • 完成。往上看。谢谢!

标签: java pdfbox


【解决方案1】:

将公共日志记录到您的类路径中,这应该可以解决它。 下载链接在这里http://commons.apache.org/logging/

您所指的课程是 http://commons.apache.org/logging/commons-logging-1.0.3/docs/api/org/apache/commons/logging/LogFactory.html 可能是内部从 PDFBox API 引用的。

【讨论】:

  • 我对 Java 很陌生,不知道如何实现这个建议。如何向我的类路径添加内容?
  • 知道了。只需要 .jar 文件并将其包含在库中。该程序仍然崩溃,但现在在静默打印线上。如果我无法超越该解决方案,我会将其标记为解决方案并重新发布。谢谢!
【解决方案2】:

在加载文件路径之前先尝试初始化PDDocument类。

PDDocument document = new PDDocument();
document = PDDocument.load(fPath);

这应该可以解决它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-13
    • 2016-01-25
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    相关资源
    最近更新 更多