在某些情況下,您可能需要從 PowerPoint 演示文稿中提取圖像和文本。為實現這一點,本文介紹瞭如何在 Java 中以編程方式從 PowerPoint PPT 或 PPTX 中提取圖像。您還將學習如何僅從背景或 PPT 幻燈片中的形狀中提取圖像。
從 PowerPoint PPT 中提取圖像的 Java API
Aspose.Slides for Java 是一種流行且功能豐富的 API,可讓您無縫地創建和操作 PowerPoint 演示文稿。我們將使用此 API 從 PPT/PPTX 文件中提取圖像。您可以 下載 API 的 JAR 或使用以下 Maven 配置安裝它。
存儲庫:
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
依賴:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-slides</artifactId>
<version>22.1</version>
<classifier>jdk16</classifier>
</dependency>
用 Java 從 PowerPoint PPT 中提取圖像
在 PowerPoint 演示文稿中,幻燈片中使用的所有圖像都存儲在一個圖像集中。可以訪問此集合,並且每個圖像都可以保存為一個文件。以下是用 Java 提取 PPT 演示文稿中所有圖像的步驟。
- 首先,使用 Presentation 類加載 PPT/PPTX 演示文稿。
- 然後,使用 Presentation.getImages() 方法訪問演示文稿中的圖像集合。
- 最後,獲取每個圖像的類型和格式並保存。
以下代碼示例展示瞭如何使用 Java 從 PowerPoint PPTX 文件中提取圖像。
// 加載演示文稿
Presentation pres = new Presentation("presentation.pptx");
int imageIndex = 1;
String imageType = "";
String imagePath = "Image_";
// 循環圖像
for (IPPImage image : pres.getImages()) {
// 獲取圖像類型
imageType = image.getContentType();
imageType = imageType.substring(imageType.indexOf("/") + 1, imageType.length());
// 保存圖片
try {
ImageIO.write(image.getSystemImage(), imageType, new File(imagePath + imageIndex + "." + imageType.toString()));
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
imageIndex++;
}
在 Java 中從 PPTX 形狀中提取圖像
您也可以僅從 PPT 幻燈片中的形狀中提取圖像。以下是完成該操作的步驟。
- 首先,使用 Presentation 類加載演示文稿文件。
- 然後,使用 Presentation.getSlides() 方法訪問幻燈片集合。
- 對於每張幻燈片,使用 ISlide.getShapes() 方法訪問其形狀。
- 對集合中的每個形狀執行以下步驟:
- 檢查形狀是否為自動形狀並填充圖片,然後使用 getImage() 方法提取其圖像。
- 檢查形狀是否為相框,然後使用 getImage() 方法提取其圖像。
- 最後,將圖像保存為文件。
下面的代碼示例展示瞭如何使用 Java 從 PPT 中的形狀中提取圖像。
// 加載演示文稿
Presentation pres = new Presentation("presentation.pptx");
com.aspose.slides.IPPImage img = null;
int slideIndex = 0;
String imageType = "";
boolean isImageFound = false;
// 循環播放幻燈片
for (int i = 0; i < pres.getSlides().size(); i++) {
slideIndex++;
// 訪問幻燈片
ISlide sl = pres.getSlides().get_Item(i);
for (int j = 0; j < sl.getShapes().size(); j++) {
// 訪問形狀
IShape sh = sl.getShapes().get_Item(j);
// 檢查它是否是自動形狀
if (sh instanceof IAutoShape) {
IAutoShape ashp = (IAutoShape) sh;
if (ashp.getFillFormat().getFillType() == FillType.Picture) {
img = ashp.getFillFormat().getPictureFillFormat().getPicture().getImage();
imageType = img.getContentType();
imageType = imageType.substring(0, imageType.indexOf("/") + 1);
isImageFound = true;
}
}
// 如果形狀是相框
else if (sh instanceof IPictureFrame) {
IPictureFrame pf = (IPictureFrame) sh;
img = pf.getPictureFormat().getPicture().getImage();
imageType = img.getContentType();
imageType = imageType.substring(imageType.indexOf("/") + 1, imageType.length());
isImageFound = true;
}
// 設置想要的圖片格式
if (isImageFound) {
try {
ImageIO.write(img.getSystemImage(), imageType,
new File("Slide_" + slideIndex + "_Shape_" + j + "." + imageType));
} catch (IO例外 ex) {
// 例外
}
}
isImageFound = false;
}
}
從 PPT 幻燈片背景中提取 Java 圖像
另一種可能的情況是提取僅用作幻燈片背景的圖像。以下步驟顯示如何在 Java 中提取幻燈片背景圖像。
首先,使用 Presentation 類加載演示文稿。
然後,使用 Presentation.getSlides() 方法循環瀏覽演示文稿中的幻燈片。
對於每張幻燈片,執行以下步驟:
使用 ISlide.getBackground().getFillFormat().getFillType() 方法檢查幻燈片是否有背景圖像。
如果背景有圖片,則使用 getImage() 方法提取圖像。
使用 ISlide.getLayoutSlide().getBackground().getFillFormat().getFillType() 方法檢查佈局幻燈片是否有背景圖像。
如果佈局幻燈片的背景充滿圖片,則使用 getImage() 方法提取它。
最後,將提取的圖像保存為文件。
以下代碼示例展示瞭如何使用 Java 從 PPT 中的幻燈片背景中提取圖像。
// 加載演示文稿
Presentation pres = new Presentation("presentation.pptx");
com.aspose.slides.IPPImage img = null;
com.aspose.slides.IPPImage backImage = null;
String ImagePath = "BackImage_";
int slideIndex = 0;
String imageType = "";
for (int i = 0; i < pres.getSlides().size(); i++) {
slideIndex++;
// 訪問幻燈片
ISlide sl = pres.getSlides().get_Item(i);
// 檢查背景是否被圖片填充
if (sl.getBackground().getFillFormat().getFillType() == FillType.Picture) {
// 獲取背景圖片
backImage = sl.getBackground().getFillFormat().getPictureFillFormat().getPicture().getImage();
// 保存圖片
BufferedImage image = backImage.getSystemImage();
imageType = backImage.getContentType();
imageType = imageType.substring(imageType.indexOf("/") + 1, imageType.length());
try {
ImageIO.write(image, imageType,
new File(ImagePath + "Slide_" + slideIndex + "." + imageType.toString()));
} catch (IOException ex) {
// 讀取異常信息
}
} else {
// 檢查幻燈片佈局是否有圖像背景
if (sl.getLayoutSlide().getBackground().getFillFormat().getFillType() == FillType.Picture) {
// 獲取背景圖片
backImage = sl.getLayoutSlide().getBackground().getFillFormat().getPictureFillFormat().getPicture()
.getImage();
// 保存圖片
BufferedImage image = backImage.getSystemImage();
imageType = backImage.getContentType();
imageType = imageType.substring(imageType.indexOf("/") + 1, imageType.length());
try {
ImageIO.write(image, imageType,
new File(ImagePath + "LayoutSlide_" + slideIndex + "." + imageType.toString()));
} catch (IOException ex) {
// 讀取異常信息
}
}
}
}
Java PowerPoint 圖像提取 API - 獲取免費許可證
Aspose 提供了一個免費的臨時許可證,可以在沒有評估限制的情況下使用 Aspose.Slides for Java。你可以為自己買一個。
結論
在本文中,我們演示瞭如何使用 Java 從 PowerPoint PPT/PPTX 中提取圖像。此外,我們還介紹瞭如何分別從形狀或幻燈片背景中提取圖像。此外,您可以通過訪問 文檔 閱讀更多關於 Aspose.Slides for Java 的信息。此外,您可以將您的查詢發佈到我們的論壇。