0

我正在使用 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)

PS:此代码与另一个模板一起工作得很好。我需要根据用户选择使用不同的模板。(模板存储在数据库中,因为我正在使用 liferay)。

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

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

4

1 回答 1

1

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

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

错误状态rel为空。所以代码行 521 中的org.apache.poi.xslf.usermodel.XSLFSheet.importBlip :

blipPart = packagePart.getRelatedPart(blipRel);

已移交blipRel为空。所以代码行 235 中的org.apache.poi.xslf.usermodel.XSLFSlide.importContent :

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 数据。

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

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

于 2017-01-27T06:35:37.907 回答