XWPF在POI 3.X版本后报错处理

Caused by: java.lang.NoClassDefFoundError: org/apache/poi/POIXMLDocumentPart
        at org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument.getFontsDocument(XWPFStylesDocument.java:1477)

报错内容如上: NoClassDefFoundError: org/apache/poi/POIXMLDocumentPart

根据搜索得到该错误是由于POI组件XWPF最新版本也只支持3.X版本的POI导致。由于某段时间框架调整升级到了4.X,但未对该代码相关功能进行回归测试,所以出现异常。

参考:https://blog.csdn.net/u011852988/article/details/123789135 内容将处理方式整理如下:

1、下载Central Repository: fr/opensagres/xdocreport/org.apache.poi.xwpf.converter.core/1.0.6源码

2、将报错类源文件复制到工程代码下

 3、修改源文件中报错的部分:

3.1 更换导入的POIXMLDocumentPart类为 

import org.apache.poi.ooxml.POIXMLDocumentPart;

3.2修改报错方法

    private static XWPFSettings getSettings( XWPFDocument document )
    {
        for ( POIXMLDocumentPart p : document.getRelations() )
        {
            PackageRelationshipCollection relationships = p.getPackagePart().getPackage().getRelationships();
            for (PackageRelationship relationship : relationships) {
                String relationshipType = relationship.getRelationshipType();
                if ( relationshipType.equals( XWPFRelation.SETTINGS.getRelation() ) )
                {
                    return (XWPFSettings) p;
                }
            }
        }
        return null;
    }


    private static List<ThemeDocument> getThemeDocuments( XWPFDocument document )
    {
        List<ThemeDocument> themeDocuments = new ArrayList<ThemeDocument>();

        for ( POIXMLDocumentPart p : document.getRelations() )
        {
            PackageRelationshipCollection relationships = p.getPackagePart().getPackage().getRelationships();
            for (PackageRelationship relationship : relationships) {
                String relationshipType = relationship.getRelationshipType();
                if ( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme".equals( relationshipType ) )
                {
                    try
                    {
                        InputStream inputStream = p.getPackagePart().getInputStream();
                        ThemeDocument theme = ThemeDocument.Factory.parse( inputStream );
                        themeDocuments.add( theme );
                    }
                    catch ( Throwable e )
                    {
                        e.printStackTrace();
                    }
                }
            }
        }

        return themeDocuments;
    }

    private static List<FontsDocument> getFontsDocument( XWPFDocument document )
    {

        List<FontsDocument> fontsDocuments = new ArrayList<FontsDocument>();

        for ( POIXMLDocumentPart p : document.getRelations() )
        {
            PackageRelationshipCollection relationships = p.getPackagePart().getPackage().getRelationships();
            for (PackageRelationship relationship : relationships) {
                String relationshipType = relationship.getRelationshipType();
                // "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable"
                if ( XWPFRelation.FONT_TABLE.getRelation().equals( relationshipType ) )
                {
                    try
                    {
                        InputStream inputStream = p.getPackagePart().getInputStream();
                        FontsDocument fontsDocument = FontsDocument.Factory.parse( inputStream );
                        fontsDocuments.add( fontsDocument );
                    }
                    catch ( Exception e )
                    {
                        e.printStackTrace();
                    }
        
                }
            }
        }
        return fontsDocuments;
    }

 

重新部署,可正常运行。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值