本文将使用Free Spire.Presentation for Java免费控件来介绍如何插入图片到PowerPoint幻灯片中,以及如何编辑、提取和删除幻灯片中已有的图片。
Free Spire.Presentation for Java 是一个专业的PowerPoint API,它允许开发人员在Java应用程序中创建、编辑、读取、转换和保存PowerPoint文档。作为一款独立的Java组件,它的运行环境无需安装Microsoft PowerPoint。
Jar文件获取及导入
在运行代码前,需将Jar包导入IDEA中。导入方式有两种:其一,在E-iceblue中文官网上下载Free Spire.Presentation for Java产品包,解压后将lib文件夹下的Spire.Presentation.jar手动导入IDEA;其二,在IDEA中创建一个Maven项目,然后在pom.xml文件下键入以下代码,最后点击“Import Changes”即可。
com.e-icebluehttp://repo.e-iceblue.cn/repository/maven-public/e-iceblue spire.presentation.free 3.9.0
代码示例
示例1 插入图片到PowerPoint幻灯片中
import com.spire.presentation.*;import com.spire.presentation.drawing.FillFormatType;import java.awt.geom.Rectangle2D;public class InsertImages { public static void main(String[] args) throws Exception { //创建Presentation实例 Presentation ppt = new Presentation();Rectangle2D rect = new Rectangle2D.Double(ppt.getSlideSize().getSize().getWidth() / 2 - 280, 140, 300, 250); //获取第一张幻灯片(创建后默认含有一张幻灯片) ISlide slide = ppt.getSlides().get(0); //插入图片到幻灯片 IEmbedImage image = slide.getShapes().appendEmbedImage(ShapeType.RECTANGLE, "C:甥敳獲Test1DesktopImage1.jpg", rect); image.getLine().setFillType(FillFormatType.NONE); //添加一张新的幻灯片 slide = ppt.getSlides().append(); //插入图片到幻灯片 image = slide.getShapes().appendEmbedImage(ShapeType.RECTANGLE, "C:甥敳獲Test1DesktopImage2.png", rect); image.getLine().setFillType(FillFormatType.NONE); //保存文档 ppt.saveToFile("output/InsertImages.pptx", FileFormat.PPTX_2013); }}
效果图:
示例2 编辑PowerPoint幻灯片中的图片
import com.spire.presentation.*;public class EditImage { public static void main(String[] args) throws Exception { //创建实例,加载PPT测试文档 Presentation ppt = new Presentation(); ppt.loadFromFile("C:甥敳獲Test1DesktopInsertImages.pptx"); //获取第一张幻灯片 ISlide slide = ppt.getSlides().get(0); //遍历幻灯片中的形状 for( int i = 0; i< slide.getShapes().getCount();i++){ IShape shape = slide.getShapes().get(i); //设置图片高、宽、位置、旋转、可选文本、像素、名称等 if(shape instanceof SlidePicture){ SlidePicture pic = (SlidePicture) shape; pic.setHeight(270); pic.setWidth(400); pic.setAlternativeText("原始图片文件"); pic.setAlternativeTitle("标题1"); pic.setRotation(30); pic.setLeft(200); pic.setTop(150); pic.setName("图片1"); pic.getPictureFill().getPicture().setTransparency(60); } } //保存文档 ppt.saveToFile("output/ModifyImage.pptx",FileFormat.PPTX_2013); ppt.dispose(); }}
编辑前后对比图:
示例3 提取Powerpoint幻灯片中的图片
情况1:提取所有幻灯片中的图片
import com.spire.presentation.Presentation;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;public class ExtractImages { public static void main(String[] args) throws Exception { //创建Presentation实例 Presentation ppt = new Presentation(); //加载PowerPoint文档 ppt.loadFromFile("C:甥敳獲Test1DesktopInsertImages.pptx"); //提取文档中的所有图片 for (int i = 0; i < ppt.getImages().getCount(); i++) { BufferedImage image = ppt.getImages().get(i).getImage(); ImageIO.write(image, "PNG", new File(String.format("output/" + "extractImage-%1$s.png", i))); } }}
提取效果:
情况2 提取指定幻灯片中的图片
import com.spire.presentation.*;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;public class ExtractSpecifiedImage { public static void main(String[] args) throws Exception { //创建Presentation实例 Presentation ppt = new Presentation(); //加载PowerPoint文档 ppt.loadFromFile("C:甥敳獲Test1DesktopInsertImages.pptx"); //获取第一张幻灯片 ISlide slide = ppt.getSlides().get(0); //提取图片 for(int i = 0; i< slide.getShapes().getCount(); i++) { IShape shape = slide.getShapes().get(i); if(shape instanceof SlidePicture) { SlidePicture pic = (SlidePicture) shape; BufferedImage image = pic.getPictureFill().getPicture().getEmbedImage().getImage(); ImageIO.write(image, "PNG", new File(String.format("output/" + "extractSpecifiedImage-%1$s.png", i))); } if(shape instanceof PictureShape) { PictureShape ps = (PictureShape) shape; BufferedImage image = ps.getEmbedImage().getImage(); ImageIO.write(image, "PNG", new File(String.format("output/" + "extractSpecifiedImage-%1$s.png", i))); } } }}
提取效果:
示例4 删除PowerPoint幻灯片中的图片
import com.spire.presentation.*;public class DeleteImages { public static void main(String[] args) throws Exception { //加载PPT文档 Presentation ppt = new Presentation(); ppt.loadFromFile("C:甥敳獲Test1DesktopInsertImages.pptx"); //获取指定幻灯片 ISlide slide = ppt.getSlides().get(1); //遍历幻灯片中的形状 for( int i = 0; i< slide.getShapes().getCount();i++){ IShape shape = slide.getShapes().get(i); //删除图片 if(shape instanceof SlidePicture){ SlidePicture pic = (SlidePicture) shape; slide.getShapes().remove(pic); } } //保存文档 ppt.saveToFile("output/DeleteImages.pptx", FileFormat.PPTX_2013); ppt.dispose(); }}
删除前后对比图: