when I covert pptx to png using apache poi class PPTX2PNG.java,It throws NullPointerException. Here is the exception:
java.lang.NullPointerException
at org.apache.poi.sl.draw.DrawTextParagraph.getRenderableText(DrawTextParagraph.java:331)
at org.apache.poi.sl.draw.DrawTextParagraph.getAttributedString(DrawTextParagraph.java:483)
at org.apache.poi.sl.draw.DrawTextParagraph.breakText(DrawTextParagraph.java:232)
at org.apache.poi.sl.draw.DrawTextShape.drawParagraphs(DrawTextShape.java:134)
at org.apache.poi.sl.draw.DrawTextShape.getTextHeight(DrawTextShape.java:179)
at org.apache.poi.xslf.usermodel.XSLFTextShape.getTextHeight(XSLFTextShape.java:536)
at org.apache.poi.sl.draw.DrawTextShape.drawContent(DrawTextShape.java:85)
at org.apache.poi.sl.draw.DrawSimpleShape.draw(DrawSimpleShape.java:96)
at org.apache.poi.sl.draw.DrawSheet.draw(DrawSheet.java:67)
at org.apache.poi.sl.draw.DrawSlide.draw(DrawSlide.java:39)
at org.apache.poi.xslf.usermodel.XSLFSlide.draw(XSLFSlide.java:291)
at cn.mailtech.icm.POITest.pptx2png(POITest.java:66)
at cn.mailtech.icm.POITest.testPPTX2Png(POITest.java:31)
And here is the main code:
private void pptx2png(File file,String out) throws IOException {
SlideShow<?, ?> ss = SlideShowFactory.create(file, null, true);
List<? extends Slide<?, ?>> slides = ss.getSlides();
Set<Integer> slidenum = slideIndexes(slides.size(), "1");
if (slidenum.isEmpty()) {
//usage("slidenum must be either -1 (for all) or within range: [1.." + slides.size() + "] for " + file);
ss.close();
return;
}
Dimension pgsize = ss.getPageSize();
int width = (int) (pgsize.width);
int height = (int) (pgsize.height);
for (Integer slideNo : slidenum) {
Slide<?, ?> slide = slides.get(slideNo);
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics = img.createGraphics();
DrawFactory.getInstance(graphics).fixFonts(graphics);
// default rendering options
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
graphics.scale(1, 1);
// draw stuff
slide.draw(graphics);
// save the result
File outfile = new File(out + slideNo + ".png");
ImageIO.write(img, ".png", outfile);
}
}
When I debug in.I found that I think this is a bug for apache poi.