グスタボTassio:
私はパワーポイントのスライドショーを作成するアプリケーションを作っています。私は、すべてのスライドに画像を置くために管理していますが、それは書かれたテキストをオーバーレイ。画像の前にテキストを配置する方法?
これは私のコードです。
public void createNewSlide() throws FileNotFoundException, IOException{
XMLSlideShow ppt = new XMLSlideShow();
XSLFSlideMaster master = ppt.getSlideMasters().get(0);
XSLFSlideLayout layout = master.getLayout(SlideLayout.TITLE_ONLY);
//propiedades do slide
ppt.setPageSize(new Dimension(1280,720));
XSLFSlide slide = ppt.createSlide(layout);
//primeiro slide, começando com texto
XSLFTextShape title = slide.getPlaceholder(0);
title.clearText();
XSLFTextParagraph paragraph = title.addNewTextParagraph();
XSLFTextRun textRun = paragraph.addNewTextRun();
textRun.setText("Simple Text");
textRun.setFontColor(Color.decode("#00ff99"));
textRun.setFontSize(60.);
title.setAnchor(new Rectangle(100,100,500,500));
//adicionando imagem ao ppt
byte[] picData = IOUtils.toByteArray(new FileInputStream("espace.jpg"));
XSLFPictureData pcData = ppt.addPicture(picData, PictureData.PictureType.JPEG);
XSLFPictureShape pictureShape = slide.createPicture(pcData);
pictureShape.setAnchor(new Rectangle(0,0,1280,720));
FileOutputStream out = new FileOutputStream("AprentacaoTeste.pptx");
ppt.write(out);
out.close();
ppt.close();
}
これらは、私の依存関係しています
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
私はIDEとしてのNetBeansを使用しています
アクセル・リヒター:
挿入された画像は、形状ツリーの最後の形状です。だから、形状ツリー内のすべての他の形状の目の前にあります。これは、すべての他の形状の後ろにあることを、形状ツリー内の最初の形状でなければならないでしょう。しかし、形状がすでに追加されている場合は形状ツリーの順序を変更することは非常に困難です。そしてプレースホルダは、他の形状を添加した前のレイアウトにすでに存在しています。
しかし、私は、何をやろうとすると、スライドに背景画像を設定していると思います。また、これは基本的な使用のみ可能であるooxml-schemas
、今までのクラスを。しかし、それははるかに単純な形状の木の順序を変更するよりもです。
例:
import java.io.FileOutputStream;
import java.io.FileInputStream;
import org.apache.poi.util.IOUtils;
import org.apache.poi.sl.usermodel.PictureData;
import org.apache.poi.xslf.usermodel.*;
import org.openxmlformats.schemas.presentationml.x2006.main.CTBackgroundProperties;
import org.openxmlformats.schemas.drawingml.x2006.main.CTBlipFillProperties;
import org.openxmlformats.schemas.drawingml.x2006.main.CTRelativeRect;
import org.openxmlformats.schemas.drawingml.x2006.main.CTBlip;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Color;
public class CreatePPTXPictureBehindText {
static void setBackgroundPicture(XSLFSlide slide, String picturePath, PictureData.PictureType pictureType) throws Exception {
byte[] picData = IOUtils.toByteArray(new FileInputStream(picturePath));
XSLFPictureData pcData = slide.getSlideShow().addPicture(picData, pictureType);
CTBackgroundProperties backgroundProperties = slide.getXmlObject().getCSld().addNewBg().addNewBgPr();
CTBlipFillProperties blipFillProperties = backgroundProperties.addNewBlipFill();
CTRelativeRect ctRelativeRect = blipFillProperties.addNewStretch().addNewFillRect();
String idx = slide.addRelation(null, XSLFRelation.IMAGES, pcData).getRelationship().getId();
CTBlip blib = blipFillProperties.addNewBlip();
blib.setEmbed(idx);
}
public static void main(String[] args) throws Exception {
XMLSlideShow ppt = new XMLSlideShow();
//set page size
ppt.setPageSize(new Dimension(1280,720));
//create first slide title layout
XSLFSlideMaster master = ppt.getSlideMasters().get(0);
XSLFSlideLayout layout = master.getLayout(SlideLayout.TITLE_ONLY);
XSLFSlide slide = ppt.createSlide(layout);
//set title placeholder's text and anchor
XSLFTextShape title = slide.getPlaceholder(0);
title.clearText();
XSLFTextParagraph paragraph = title.addNewTextParagraph();
XSLFTextRun textRun = paragraph.addNewTextRun();
textRun.setText("Simple Text");
textRun.setFontColor(Color.decode("#00ff99"));
textRun.setFontSize(60.);
title.setAnchor(new Rectangle(100,100,500,500));
//set background picture for slide
setBackgroundPicture(slide, "./espace.jpeg", PictureData.PictureType.JPEG);
FileOutputStream out = new FileOutputStream("./AprentacaoTeste.pptx");
ppt.write(out);
out.close();
ppt.close();
}
}