Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误:由以下原因引起:java.lang.IllegalArgumentException:Relationship null不以此部分/ppt/slides/slide3.xml开头_Java_Apache Poi_Liferay 6_Xslf - Fatal编程技术网

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

错误:由以下原因引起:java.lang.IllegalArgumentException:Relationship null不以此部分/ppt/slides/slide3.xml开头,java,apache-poi,liferay-6,xslf,Java,Apache Poi,Liferay 6,Xslf,我正在使用ApachePOI xslf导出ppt文件。 首先,我有一个包含3张幻灯片的模板集:标题幻灯片、摘要幻灯片和第三张幻灯片 我复制了第三张幻灯片作为模板,以便复制数据库中的许多数据/图形 因此,为了做到这一点: XMLSlideShow slideShow = new XMLSlideShow(dlfile.getContentStream()); XSLFSlide[] slides = slideShow.getSlides(); XSLFSlide createdSlide = s

我正在使用ApachePOI 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.importContentslides[2]

附言:这段代码在另一个tempalte上运行得很好。 我需要根据用户选择使用不同的模板。在我使用liferay时,模板存储在db中

我已经找了好几个小时了,但是没有找到! 我甚至不明白这个错误是什么意思

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

错误来自代码行468:

抛出新的IllegalArgumentExceptionRelationship+rel+不以此部件+\u partName;开头

该错误表示rel为null。所以在代码行521中:

blipport=packagePart.getRelatedPartblipRel

已将blipRelas归为空。所以在代码行235中:

字符串relId=importblippid,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;
}
只考虑嵌入的光点数据

从您的代码行中,我可以看到您正在使用ApachePOI版本3.9。但就我在当前版本中所见,这一点直到现在都没有改变。仅考虑嵌入的bilp数据


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

您使用的是什么版本的Apache POI?如果它不是最新的,升级时会发生什么?我通过liferay获得了具有依赖性的poi.jar。我不知道我用的是哪个版本。非常感谢你的回答。事实上,它来自我模板中的图片。作为一个新手,我不明白这是怎么回事:
@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;
}