ERROR : Caused by: java.lang.IllegalArgumentException: Relationship null doesn't start with this part /ppt/slides/slide3.xml
ERROR : Caused by: java.lang.IllegalArgumentException: Relationship null doesn't start with this part /ppt/slides/slide3.xml
我正在使用 apache poi xslf 导出 ppt 文件。
首先,我有一个包含 3 张幻灯片的模板集:标题幻灯片、摘要幻灯片和第三张幻灯片
我复制了第 3 张幻灯片(我将其作为模板),以便复制许多 data/graphics,因为我在数据库中有。
所以为了做到这一点:
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)
P.S :此代码适用于另一个模板。
我需要根据用户选择使用不同的模板。 (模板存储在数据库中,因为我正在使用 liferay)。
我搜索了几个小时,但没有成功!
我什至不明白这个错误是什么意思。
任何 links/help 将不胜感激。
错误来自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.importContent 在代码行 235 中:
String relId = importBlip(blipId, src.getPackagePart());
已将 blipId
作为 null 移交。
如果幻灯片 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 poi
3.9 版。但据我所知,在当前版本中,这直到现在都没有改变。仅考虑嵌入的 bilp 数据。
因此请查看您的模板并确保所有图片均已嵌入且未链接。
我正在使用 apache poi xslf 导出 ppt 文件。 首先,我有一个包含 3 张幻灯片的模板集:标题幻灯片、摘要幻灯片和第三张幻灯片
我复制了第 3 张幻灯片(我将其作为模板),以便复制许多 data/graphics,因为我在数据库中有。
所以为了做到这一点:
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)
P.S :此代码适用于另一个模板。 我需要根据用户选择使用不同的模板。 (模板存储在数据库中,因为我正在使用 liferay)。
我搜索了几个小时,但没有成功! 我什至不明白这个错误是什么意思。
任何 links/help 将不胜感激。
错误来自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.importContent 在代码行 235 中:
String relId = importBlip(blipId, src.getPackagePart());
已将 blipId
作为 null 移交。
如果幻灯片 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 poi
3.9 版。但据我所知,在当前版本中,这直到现在都没有改变。仅考虑嵌入的 bilp 数据。
因此请查看您的模板并确保所有图片均已嵌入且未链接。