我试过通过java API(Apache POI)合并两个pptx文件 它适用于只有文本内容的PPTX。
我需要帮助合并两个PPTX文件而不会丢失图表,表格,图像,主题等。是否有任何开源Java API-s?
答案 0 :(得分:0)
披露:我为Plutext工作
Plutext的Docx4j企业版可以合并复杂的演示文稿。您可以决定输出是否具有第一个pptx的外观,或者保留输入的单个外观。简单的用法是这样的:
String[] deck = {"deck1.pptx", "deck2.pptx"};
PresentationBuilder builder = new PresentationBuilder();
builder.setThemeTreatment(ThemeTreatment.RESPECT); // preserve appearance of each deck?
for (int i=0 ; i< deck.length; i++) {
// Create a SlideRange representing the slides in this pptx
SlideRange sr = new SlideRange(
(PresentationMLPackage)OpcPackage.load(
new File(DIR_IN + deck[i])));
// Add the slide range to the output
builder.addSlideRange(sr);
}
builder.getResult().save(
new File("OUT_MergeWholePresentations.pptx"));
Docx4j Enterprise Ed是一种商业产品。我不知道开源解决方案可以通过高级API提供您想要的解决方案。与POI一样,您可以使用开源docx4j / pptx4j的低级API实现您自己想要的功能,但要做到这一点,您需要对pptx文件格式和pptx4j有一个正确的理解。 (docx4j / pptx4j使用JAXB; POI使用XML Bean)
答案 1 :(得分:0)
Apache POI建议以下内容:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
public class MergingMultiplePresentations {
public static void main(String args[]) throws IOException {
//creating empty presentation
XMLSlideShow ppt = new XMLSlideShow();
//taking the two presentations that are to be merged
String file1 = "presentation1.ppt";
String file2 = "presentation2.ppt";
String[] inputs = {file1, file2};
for (String arg : inputs) {
InputStream inputstream = MergingMultiplePresentations.class.getClassLoader().getResourceAsStream(arg);
XMLSlideShow src = new XMLSlideShow(inputstream);
for (XSLFSlide srcSlide : src.getSlides()) {
//merging the contents
ppt.createSlide().importContent(srcSlide);
}
}
String file3 = "combinedpresentation.ppt";
//creating the file object
FileOutputStream out = new FileOutputStream(file3);
// saving the changes to a file
ppt.write(out);
System.out.println("Merging done successfully");
out.close();
}
}
在合并过程中某些内容可能会丢失。同样,在某些情况下,它的行为也确实很容易出错。它可能会因org.apache.xmlbeans.impl.values.XmlValueOutOfRangeException而失败,然后,如果您使用Microsoft PPT从资源管理器中打开ppt文件,则在合并之前,请对其进行任何更改,保存文件,然后进行合并,效果很好。