【问题标题】:How to duplicate a slide containing a chart using apache POI?如何使用 apache POI 复制包含图表的幻灯片?
【发布时间】:2016-02-16 11:45:44
【问题描述】:

亲爱的,

我正在使用 Apache POI,我想复制一张幻灯片,其中包含来自代码的多个图表。

当幻灯片上没有图表时,下面的代码(受https://poi.apache.org/slideshow/xslf-cookbook.html#Merge 启发)可以正常工作。

不幸的是,使用这种方法似乎无法复制图表:当我尝试打开生成的文件时,Powerpoint 检测到问题,尝试修复它,但失败了,我得到了空白幻灯片。

我检查了底层 XML 文件(使用 Open XML SDK),似乎图表本身(在文件夹 /ppt/charts 中)没有重复,并且关系文件(在文件夹 /ppt/slides/_rels 中)是未完全更新。

这是我当前的代码:

// Open slideshow
FileInputStream fileInputStream = new FileInputStream(sourceFilePath);
XMLSlideShow slideShow = new XMLSlideShow(fileInputStream);
fileInputStream.close();

// Duplicate slide
XSLFSlideLayout layout = slide.getSlideLayout();
XSLFSlide newSlide = slideshow.createSlide(layout);
newSlide.importContent(slide);

// Save updated slideshow
FileOutputStream fileOutputStream = new FileOutputStream(outputFilePath);
slideShow.write(fileOutputStream);
fileOutputStream.close();

你知道我如何克隆幻灯片及其图表吗?

非常感谢,并致以最诚挚的问候!

【问题讨论】:

    标签: java apache-poi powerpoint xslf


    【解决方案1】:

    你不能。我试了又试,问题是复制不处理图像或图表。

    我不得不通过脚本手动复制文件。步骤如下:

    • 找到幻灯片文件
    • 复制它
    • 在 XML 文件中找到图表对象,并记下 relation Id
    • 在关系文件中,检查由关系 ID 指定的文件
    • 复制此文件
    • 您还必须复制新幻灯片的关系文件,并更新名称
    • 新幻灯片不可见,您必须更新 presentaion.xml
    • 请注意:如果您希望您的 PPTX 与 Microsoft Powerpoint 一起使用,您还必须复制相关的 Excel 工作簿(参见图表的关系文件)

    【讨论】:

      【解决方案2】:

      自 Apache POI 4.0.0 起,问题中的原始代码将用于复制幻灯片。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-25
        • 2011-11-28
        • 2012-02-12
        • 1970-01-01
        相关资源
        最近更新 更多