簡體   English   中英

錯誤:由以下原因引起:java.lang.IllegalArgumentException:關系null並非從此部分開始/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張幻燈片的模板集:標題幻燈片,摘要幻燈片和第三張幻燈片

我復制了第三張幻燈片(我將其作為模板),以便像在數據庫中一樣復制許多數據/圖形。

因此,為了做到這一點:

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時,模板存儲在db中)。

我搜索了幾個小時,但徒勞! 我什至不明白錯誤的含義。

任何鏈接/幫助將不勝感激。

該錯誤來自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移交為null。 因此,在代碼行235中的org.apache.poi.xslf.usermodel.XSLFSlide.importContent

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數據。

因此,請查看您的模板,並確保所有圖片均已嵌入且未鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM