簡體   English   中英

Apache POI 異常

[英]Apache POI exception

我需要將 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>

出於某種原因,我在轉換運行期間遇到異常:

線程“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) 原因 d 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 的信息。

這是我用來轉換 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。

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

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

compile group: 'fr.opensagres.xdocreport', name: 'fr.opensagres.poi.xwpf.converter.pdf', version: '2.0.2'
compile group: 'org.apache.poi', name: 'poi-ooxml-schemas', version: '4.1.2'

這兩個依賴足以執行上面的例子。

我有類似的問題,但我有“兩步”腳本。
1.從docx模板文檔創建docx(用值替換占位符)
2. 從創建的 docx 生成 PDF
我面臨的問題是兩種方法都使用的某些庫之間的沖突。 當我升級 poi-ooxml 庫版本時 -> PDF 生成器拋出no class found java.lang.NoClassDefFoundError: org/apache/poi/POIXMLDocumentPart並且如果版本較舊,則 docx 生成器失敗。
對我來說,正確搭配的黃金比例是:

'org.apache.poi',名稱:'poi-ooxml',版本:'3.10.1'
'fr.opensagres.xdocreport',名稱:'fr.opensagres.xdocreport.converter.docx.xwpf',版本:'1.0.5'
'fr.opensagres.xdocreport',名稱:'fr.opensagres.xdocreport.core',版本:'1.0.6'
'fr.opensagres.xdocreport',名稱:'org.apache.poi.xwpf.converter.xhtml',版本:'1.0.6'


希望它會幫助某人。 我花了幾個小時解決這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM