2017-03-07 5 views
0

apache poiで生成されたスライドに背景画像を追加することはできますか? は、この私のコード -apache poiで生成されたスライドに背景イメージを追加するには?

try { 
     // create a ppt 
     XMLSlideShow ppt = new XMLSlideShow(); 
     XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0); 
     XSLFSlideLayout slidelayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);  

     // create a slide 
     XSLFSlide slide = ppt.createSlide(slidelayout); 

     // add bg image   
     File imageFile = new File("image1.jpg"); 
     InputStream is = new FileInputStream(imageFile); 
     BufferedImage image = ImageIO.read(is); 
     float w = image.getWidth(); 
     float h = image.getHeight(); 
     Rectangle2D r2d = new Rectangle2D.Float(0, 0, w, h); 
     slide.getBackground().draw(image.createGraphics(), r2d); 

     //create a file object 
     File file = new File("pres.pptx"); 
     FileOutputStream out = new FileOutputStream(file); 
     ppt.write(out); 
     ppt.close(); 

     System.out.println("slide generated!"); 
     out.close(); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 

ファイルが正常に生成されますされますが、何を行うには、背景画像は、ありませんか?背景、すなわち、スライドマスタ画像を設定

Screenshot of my slide

答えて

1

、ソリューションオフそこまでではないが、draw()方法を使用すると、完全に異なる目的を有しています。
(POI 3.16-β1でテスト済み)

import java.awt.geom.Rectangle2D; 
import java.io.File; 
import java.io.FileOutputStream; 

import org.apache.poi.sl.usermodel.PictureData.PictureType; 
import org.apache.poi.xslf.usermodel.SlideLayout; 
import org.apache.poi.xslf.usermodel.XMLSlideShow; 
import org.apache.poi.xslf.usermodel.XSLFAutoShape; 
import org.apache.poi.xslf.usermodel.XSLFPictureData; 
import org.apache.poi.xslf.usermodel.XSLFPictureShape; 
import org.apache.poi.xslf.usermodel.XSLFSlide; 
import org.apache.poi.xslf.usermodel.XSLFSlideLayout; 
import org.apache.poi.xslf.usermodel.XSLFSlideMaster; 

public class BgFill { 
    public static void main(String[] args) throws Exception { 
     // create a ppt 
     XMLSlideShow ppt = new XMLSlideShow(); 
     XSLFPictureData pd = ppt.addPicture(new File("wrench.emf"), PictureType.EMF); 
     XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0); 
     XSLFSlideLayout slidelayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT); 
     XSLFPictureShape ps = slidelayout.createPicture(pd); 
     ps.setAnchor(new Rectangle2D.Double(100, 100, 400, 400)); 

     XSLFSlide sl = ppt.createSlide(slidelayout); 
     ((XSLFAutoShape)sl.getShapes().get(0)).setText("title"); 
     ((XSLFAutoShape)sl.getShapes().get(1)).setText("content"); 

     FileOutputStream fos = new FileOutputStream("bla.pptx"); 
     ppt.write(fos); 
     fos.close(); 
    } 
} 
+0

はHSLFSlideShow代わりのXMLSlideShowを使用して終了しました。とにかくありがとう! –

関連する問題