2

我有一种方法可以创建 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();
    }

这是完整的错误日志:

org.apache.pdfbox.cos.COSDocument.(COSDocument.java:49) at org.apache.pdfbox 的线程“AWT-EventQueue-0”java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 中的异常。 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。 java.awt.Component 的 javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 的 processMouseEvent(Component.java:6508)。processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at 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) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:703) at 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(Native Method) 在 java.security .ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:676) at java.awt.EventQueue $4.run(EventQueue.java:674) 在 java.security.ProtectionDomain 的 java.security.AccessController.doPrivileged(Native Method) $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) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java :139) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:97) 引起:java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory at java.net.URLClassLoader$1.run(URLClassLoader.java: 366) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 java.lang 的 java.security.AccessController.doPrivileged(Native Method) 的 java.net.URLClassLoader$1.run(URLClassLoader.java:355)。在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java: 的 ClassLoader.loadClass(ClassLoader.java:423)308) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 39 更多

4

2 回答 2

3

将公共日志记录到您的类路径中,这应该可以解决它。下载链接在这里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。

于 2012-08-17T05:27:52.460 回答
1

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

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

那应该解决它。

于 2012-08-17T04:30:13.763 回答