错误:由以下原因引起:java.lang.IllegalArgumentException:关系空不以此部分/ppt/slides/slide3开头.xml



我正在使用apache poi xslf导出ppt文件。首先,我有一个包含 3 张幻灯片的模板集:标题幻灯片、摘要幻灯片和第三张幻灯片

我复制

了第三张幻灯片(我将其作为模板),以便复制数据库中的许多数据/图形。

所以为了做到这一点:

XMLSlideShow slideShow = new XMLSlideShow(dlfile.getContentStream());
XSLFSlide[] slides = slideShow.getSlides();
XSLFSlide createdSlide = slideShow.createSlide(slides[2].getSlideLayout());
//get content from slide to createdslide
createdSlide.importContent(slides[2]); 
//... add data to created slide

我在行有错误:createdSlide.importContent(slides[2]);

Caused by: java.lang.IllegalArgumentException: Relationship null doesn't start with this part /ppt/slides/slide3.xml
    at org.apache.poi.openxml4j.opc.PackagePart.getRelatedPart(PackagePart.java:468)
    at org.apache.poi.xslf.usermodel.XSLFSheet.importBlip(XSLFSheet.java:521)
    at org.apache.poi.xslf.usermodel.XSLFSlide.importContent(XSLFSlide.java:235)

附言:这段代码可以很好地与另一个临时代码一起使用。我需要根据用户选择使用不同的模板。(模板存储在数据库中,因为我正在使用Liferay)。

我已经搜索了几个小时,但徒劳无功!我什至不明白错误是什么意思。

任何链接/帮助将不胜感激。

错误来自 org.apache.poi.openxml4j.opc.PackagePart.getRelatedPart 代码行 468:

throw new IllegalArgumentException("Relationship " + rel + " doesn't start with this part " + _partName); .

该错误指出rel为空。所以org.apache.poi.xslf.usermodel.XSLFSheet.importBlip在代码行521中:

blipPart = packagePart.getRelatedPart(blipRel);

已将blipRel作为无效移交。所以org.apache.poi.xslf.usermodel.XSLFSlide.import代码行235中的内容:

String relId = importBlip(blipId, src.getPackagePart());

已将blipId作为无效移交。

如果幻灯片 3 中模板中的一张图片不是嵌入图片而是链接图片,则这一点非常清楚。代码:

@Override
public XSLFSlide importContent(XSLFSheet src){
    super.importContent(src);
    XSLFBackground bgShape = getBackground();
    if(bgShape != null) {
        CTBackground bg = (CTBackground)bgShape.getXmlObject();
        if(bg.isSetBgPr() && bg.getBgPr().isSetBlipFill()){
            CTBlip blip = bg.getBgPr().getBlipFill().getBlip();
            String blipId = blip.getEmbed();
            String relId = importBlip(blipId, src.getPackagePart());
            blip.setEmbed(relId);
        }
    }
    return this;
}

仅考虑嵌入的 BLIP 数据。

从您的代码行中,我可以看到您使用的是 3.9 apache poi版本。但据我在当前版本中看到,直到现在还没有改变。仅考虑嵌入的 bilp 数据。

因此,请查看您的模板,并确保所有图片都已嵌入且未链接。

相关内容

最新更新