Apache POI 异常

Est*_*ago 4 java apache pdf apache-poi

我需要将 docx 转换为 PDF,我将使用 Apache POI。这是我的 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>
Run Code Online (Sandbox Code Playgroud)

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

线程“main”中的异常 java.lang.NoClassDefFoundError: org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument.getFontsDocument(XWPFStylesDocument.java:1477) at org.apache.poi 的 org/apache/poi/POIXMLDocumentPart .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) 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) 由: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 moreURLClassLoader.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 更多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 更多

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

这是我用来转换 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) {

        }
    }
Run Code Online (Sandbox Code Playgroud)

PJ *_*ing 5

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

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

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

  • 即使使用 `apache poi` `3.17` 也不能与 `org.apache.poi.xwpf.converter.pdf ` 一起使用。这是使用`apache poi``3.9`。参见 /sf/ask/3593113471/#51337157 和 /sf/ask/3600821871/ -pdf-converter-in-java/51440649#51440649。`fr.opensagres.poi.xwpf.converter.pdf` 必须用于 `apache poi` `3.17`。 (2认同)