การรวม slide ใน PowerPoint ด้วย Apache POI

ต่อไปนี้เป็นตัวอย่างการรวม slide ใน PowerPoint ด้วย Apache POI ครับ โดยการเอาเนื้อหาของแต่ละไฟล์มารวมกันเป็นไฟล์เดียว โดยใช้เมธอด importContent() ครับ

ตัวอย่างโคด
  • ไฟล์แรก
package com.java.poi.powerpoint;

import java.io.FileOutputStream;

import org.apache.poi.xslf.usermodel.SlideLayout;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
import org.apache.poi.xslf.usermodel.XSLFTextParagraph;
import org.apache.poi.xslf.usermodel.XSLFTextRun;
import org.apache.poi.xslf.usermodel.XSLFTextShape;

public class MergeFirstFilePowerPoint {
    public static void main(String[] args) {
        try {
            // path ของไฟล์
            String fileName = "C:\\poi\\MergeFirstFilePowerPoint.pptx";
            // บันทึกเอกสารไว้ในระบบตาม path ที่ระบุ
            FileOutputStream out = new FileOutputStream(fileName);
            // สร้างภาพนิ่งเปล่าๆ
            XMLSlideShow ppt = new XMLSlideShow();
            // ดึงค่า object ของ slide master 
            XSLFSlideMaster slideMaster = ppt.getSlideMasters()[0];
            // ดึงค่า slide layout 
            XSLFSlideLayout slidelayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);
            // สร้าง  slide แรก
            XSLFSlide slide = ppt.createSlide(slidelayout);
            // ดึงค่า  place holder คือการดึงค่าตำแหน่งของข้อความที่จะใส่ตาม layout นั้นๆ 
            XSLFTextShape title = slide.getPlaceholder(0);
            // ใส่ เนื้อหาใน title 
            title.setText("First PowerPoint");
            
            // ดึงค่า  place holder ตัวที่สอง
            XSLFTextShape body = slide.getPlaceholder(1);
            body.clearText();
            // ใส่ เนื้อหาใน body 
            XSLFTextParagraph paragraph = body.addNewTextParagraph();
            XSLFTextRun text = paragraph.addNewTextRun();
            text.setText("First Text Color.");
            text.setFontSize(50);
            text.setFontColor(java.awt.Color.red);
            
            ppt.write(out);
            out.close();
            System.out.println("slide created successfully");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  • ไฟล์ที่สอง
package com.java.poi.powerpoint;

import java.io.FileOutputStream;

import org.apache.poi.xslf.usermodel.SlideLayout;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
import org.apache.poi.xslf.usermodel.XSLFTextParagraph;
import org.apache.poi.xslf.usermodel.XSLFTextRun;
import org.apache.poi.xslf.usermodel.XSLFTextShape;

public class MergeSecondFilePowerPoint {
    public static void main(String[] args) {
        try {
            // path ของไฟล์
            String fileName = "C:\\poi\\MergeSecondFilePowerPoint.pptx";
            // บันทึกเอกสารไว้ในระบบตาม path ที่ระบุ
            FileOutputStream out = new FileOutputStream(fileName);
            // สร้างภาพนิ่งเปล่าๆ
            XMLSlideShow ppt = new XMLSlideShow();
            // ดึงค่า object ของ slide master 
            XSLFSlideMaster slideMaster = ppt.getSlideMasters()[0];
            // ดึงค่า slide layout 
            XSLFSlideLayout slidelayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);
            // สร้าง  slide แรก
            XSLFSlide slide = ppt.createSlide(slidelayout);
            // ดึงค่า  place holder คือการดึงค่าตำแหน่งของข้อความที่จะใส่ตาม layout นั้นๆ 
            XSLFTextShape title = slide.getPlaceholder(0);
            // ใส่ เนื้อหาใน title 
            title.setText("Second PowerPoint");
            
            // ดึงค่า  place holder ตัวที่สอง
            XSLFTextShape body = slide.getPlaceholder(1);
            body.clearText();
            // ใส่ เนื้อหาใน body 
            XSLFTextParagraph paragraph = body.addNewTextParagraph();
            XSLFTextRun text = paragraph.addNewTextRun();
            text.setText("Second Text Color.");
            text.setFontSize(50);
            text.setFontColor(java.awt.Color.BLUE);
            
            ppt.write(out);
            out.close();
            System.out.println("slide created successfully");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  • การรวม slide
package com.java.poi.powerpoint;

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;

public class MergeFilePowerPoint {
    public static void main(String[] args) {
        try {
            // path ของไฟล์
            String fileName = "C:\\poi\\MergeFilePowerPoint.pptx";
            // บันทึกเอกสารไว้ในระบบตาม path ที่ระบุ
            FileOutputStream out = new FileOutputStream(fileName);
            // สร้างภาพนิ่งเปล่าๆ
            XMLSlideShow ppt = new XMLSlideShow();
            
            // path ไฟล์เก่าที่จะทำการรวม slide
            String file1 = "C:\\poi\\MergeFirstFilePowerPoint.pptx";
            String file2 = "C:\\poi\\MergeSecondFilePowerPoint.pptx";
            String[] inputs = {file1, file2};
            
            for(String arg : inputs){
               FileInputStream inputstream = new FileInputStream(arg);
               XMLSlideShow src = new XMLSlideShow(inputstream);
               for(XSLFSlide srcSlide : src.getSlides()){
                  // ทำการรวม slide
                  ppt.createSlide().importContent(srcSlide);
               }
            }
           
            ppt.write(out);
            out.close();
            System.out.println("slide created successfully");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ไฟล์ที่ถูกสร้าง

 ผลลัพธ์ที่ได้ 
ไฟล์แรก

ไฟล์ที่สอง

รวม slide

About Nop

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
    Blogger Comment

0 comments:

Post a Comment