[英]Extracting images from pptx with apache poi in google app engine using java
[英]Extracting images from pptx with apache poi
我正在嘗試使用Apache POI從ppt
文件中提取幻燈片,這沒有問題,但是現在我打算打開pptx
文件並執行相同的操作,有人知道如何做嗎?
這是從ppt
文件提取圖像的代碼:
public ImageIcon display() throws JPresentationException {
Background background;
background = slides[current].getBackground();
Fill f = background.getFill();
Color color = f.getForegroundColor();
Dimension dimension = ppt.getPageSize();
shapes = slides[current].getShapes();
BufferedImage img = new BufferedImage(dimension.width, dimension.height, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = img.createGraphics();
graphics.setPaint(color);
graphics.fill(new Rectangle2D.Float(0, 0, dimension.width, dimension.height));
slides[current].draw(graphics);
ImageIcon icon = new ImageIcon(img);
return icon;
}
這是在VBS中執行此操作的方法,也許您可以轉換:
Sub SaveAllPictures()
Dim ap As Presentation: Set ap = ActivePresentation
Dim savePath As String
savePath = "C:\Users\me\Desktop\files\"
Dim i As Integer
Dim sl As Slide
Dim sh As Shape
For Each sl In ap.Slides
For Each sh In sl.Shapes
If sh.Type = msoPicture Then
sh.Export PathName:=savePath & sh.Name & CStr(i) & ".png", Filter:=ppShapeFormatPNG
i = i + 1
End If
Next
Next
End Sub
盡管您可以從POI項目本身中引用一些示例代碼 ,但是下面是您應查找的內容; 希望這可以幫助;
private ImageIcon generateFromPPTX(int index) {
ImageIcon icon = null;
XMLSlideShow slideShowPPTX = null;
FileInputStream pptInputStream = null;
XSLFSlide [] allSlides = null;
XSLFSlide singleSlide = null;
BufferedImage memoryImage = null;
Graphics2D graphics = null;
try{
pptInputStream = new FileInputStream("somepptx-file.pptx");
slideShowPPTX = new XMLSlideShow(pptInputStream);
allSlides = slideShowPPTX.getSlides();
if(allSlides == null || allSlides.length == 0) {
System.out.println("Empty presentation!");
return null;
}
singleSlide = allSlides [index];
memoryImage = new BufferedImage(slideShowPPTX.getPageSize().width, slideShowPPTX.getPageSize().height, BufferedImage.TYPE_INT_ARGB);
graphics = memoryImage.createGraphics();
// Only few rendering hints set but you can set as many as you need depending on your need
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
graphics.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
singleSlide.draw(graphics);
icon = new ImageIcon(memoryImage);
}
catch(IOException exception){
System.err.println("Input/output Exception:");
exception.printStackTrace();
}
finally{
slideShowPPTX = null;
allSlides = null;
singleSlide = null;
memoryImage = null;
graphics = null;
if(pptInputStream != null){
try {
pptInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
pptInputStream = null;
}
}
return icon;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.