繁体   English   中英

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

[英]Read / Write very big pptx files with POI

我们在项目中使用Apache POI(版本3.9)来创建PowerPoint(pptx)文件。 但是,其中一些会变得非常大(每张幻灯片上有2000多个幻灯片,并且都有很多形状),因此这一代生成的GC overhead limit exceeded错误。

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

有什么办法可以写(读)这么大的文件? 我们使用Excel文档的流API取得了很大的成功,但是没有pptx的流API。

我的第一个想法是将大文件(创建时)拆分为较小的块,然后再运行。 但是,无法将这些文件合并为一个大文件(由于POI现在读取该大文件,因此再次出现GC错误)

我花了很多时间寻找一个成功的解决方案,但没有成功; 遗憾的是,目前pptx支持仅在POI中处于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文件,通常需要在某些关系文件中列出这些幻灯片。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM