Apache POI 异常 [英] Apache POI exception

查看:68
本文介绍了Apache POI 异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要将 docx 转换为 PDF,我将使用 Apache POI.这是我的 POM:

I need to convert a docx to a PDF and I am going with Apache POI. This is my POM:

<dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.0.0</version>
    </dependency>
    <dependency>
        <groupId>fr.opensagres.xdocreport</groupId>
        <artifactId>org.apache.poi.xwpf.converter.pdf</artifactId>
        <version>1.0.6</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.0.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>4.0.0</version>
    </dependency>


  </dependencies>

出于某种原因,我在转换运行期间遇到异常:

For some reason, I am getting an exception during when the conversion is running:

线程main"中的异常java.lang.NoClassDefFoundError:org/apache/poi/POIXMLDocumentPart 在org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument.getFontsDocument(XWPFStylesDocument.java:1477)在org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument.(XWPFStylesDocument.java:190)在org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument.(XWPFStylesDocument.java:184)在org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.createStylesDocument(XWPFDocumentVisitor.java:166)在org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.(XWPFDocumentVisitor.java:159)在org.apache.poi.xwpf.converter.pdf.internal.PdfMapper.(PdfMapper.java:149)在org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:55)在org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:38)在org.apache.poi.xwpf.converter.core.AbstractXWPFConverter.convert(AbstractXWPFConverter.java:45)在 temp.main.Teste(main.java:30) 在 temp.main.main(main.java:18)引起:java.lang.ClassNotFoundException:org.apache.poi.POIXMLDocumentPart 位于java.net.URLClassLoader.findClass(Unknown Source) atjava.lang.ClassLoader.loadClass(Unknown Source) atsun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) atjava.lang.ClassLoader.loadClass(Unknown Source) ... 11 更多

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/POIXMLDocumentPart at org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument.getFontsDocument(XWPFStylesDocument.java:1477) at org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument.(XWPFStylesDocument.java:190) at org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument.(XWPFStylesDocument.java:184) at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.createStylesDocument(XWPFDocumentVisitor.java:166) at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.(XWPFDocumentVisitor.java:159) at org.apache.poi.xwpf.converter.pdf.internal.PdfMapper.(PdfMapper.java:149) at org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:55) at org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:38) at org.apache.poi.xwpf.converter.core.AbstractXWPFConverter.convert(AbstractXWPFConverter.java:45) at temp.main.Teste(main.java:30) at temp.main.main(main.java:18) Caused by: java.lang.ClassNotFoundException: org.apache.poi.POIXMLDocumentPart at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 11 more

我用谷歌搜索试图找到我缺少的依赖项是什么,至少我认为是这样,但我找不到有关能够解决我的问题的 POIXMLDocumentPart 的信息.

I googled trying to find what is the dependency I missing, at least I think that's the case, but I can't find information about POIXMLDocumentPart that is able to fix my issue.

这是我用来转换 docx 的方法:

This is the method i am using to convert the docx:

public static void Teste(File file, String destino) {

        try {
            InputStream doc = new FileInputStream(file);
            XWPFDocument document = new XWPFDocument(doc);
            PdfOptions options = PdfOptions.create();
            OutputStream out = new FileOutputStream(new File(destino));
            PdfConverter.getInstance().convert(document, out, options);
            new File(destino);
        } catch(Exception e) {

        }
    }

推荐答案

XDocReport 是针对 POI 3.17 编译的.POI 4.0.0 有一些更改,XDocReport 将无法与 POI 4.0.0 一起使用.POIXMLDocumentPart 移至包 org.apache.poi.ooxml.

XDocReport is compiled against POI 3.17. POI 4.0.0 has some changes and XDocReport will not work with POI 4.0.0. POIXMLDocumentPart moved to the package org.apache.poi.ooxml.

参见 https://github.com/opensagres/xdocreport/pull/324

更新(2019 年 3 月):看起来 XDocReport 2.0.2 已更新为使用 POI 4.0.1.

Update (March 2019): Looks XDocReport 2.0.2 has been updated to use POI 4.0.1.

这篇关于Apache POI 异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆