gpt4 book ai didi

java - 使用 POI 读取/写入非常大的 pptx 文件

转载 作者:行者123 更新时间:2023-12-02 03:50:59 25 4
gpt4 key购买 nike

我们在项目中使用 Apache POI(版本 3.9)来创建 PowerPoint (pptx) 文件。然而,其中一些变得非常大(2000 多张幻灯片,每张幻灯片上都有很多形状),因此生成会产生 超出 GC 开销限制 错误。

堆空间大小不在我们的控制范围内,因为我们仅为 RCP“父”应用程序开发一个插件。

有什么方法可以写入(和读取)这么大的文件吗?我们使用 Excel 文档的流式 API 取得了巨大成功,但 pptx 没有流式 API。

我的第一个想法是将大文件(在创建时)分割成可行的更小的 block 。但是,无法将这些文件合并为一个大文件(由于 POI 现在读取大文件,再次出现 GC 错误)

我在谷歌上搜索了很多好的解决方案,但没有成功;不幸的是,POI 中的 pptx 支持目前仅处于 Beta 状态。

有人有建议吗?

<小时/>

我的解决方案:遗憾的是,我无法找到不需要进行大量 xml 编辑的解决方案。对于所有遇到相同问题的人,将 B 的内容合并到演示文稿 A 中的小路线图

  • 将 A 和 B 解压到单独的文件夹中
  • 获取 A 中的最后一张幻灯片 ID,重命名 B 中的所有幻灯片,以免名称冲突
  • 将新幻灯片添加到 Content_Types.xmlpresentations.xml
  • presentations.xml 中的新条目添加到 presentations.xml.rels
  • 编辑slideX.xml.rels,以便它们引用正确的内容

基本上确保将包含用户生成内容(幻灯片、注释、布局)的所有文件复制到 A 中,并重命名以避免冲突。然后搜索所有*.xml.rels + presentation.xml + content_types.xml并添加/修改rId内容

最佳答案

您可以尝试使用以下方法合并 POI 之外的单独幻灯片:

  • 看看 .pptx 中的幻灯片是如何存储的(.pptx 实际上是一个 Zip 文件,可以解压并查看)
  • 在合并代码中尝试创建一个新的 zip 文件,其中包含所有幻灯片以及任何其他必要的调整,通常需要在某个关系文件中列出幻灯片

关于java - 使用 POI 读取/写入非常大的 pptx 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35871318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com