问题
I'm trying to extract slides from a ppt
file with Apache POI, there is no problem in that, but now I intend to open pptx
files and do the same, does anyone knows how to??
this is the code to extract images from ppt
files:
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;
}
回答1:
Although you can refer to some example code from the POI project itself below is what you should be looking for; Hope this helps;
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;
}
回答2:
Here's the way to do it in VBS, Maybe you can convert :
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
来源:https://stackoverflow.com/questions/4650785/extracting-images-from-pptx-with-apache-poi