0

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.

Jens
  • 67,715
  • 15
  • 98
  • 113
vio ao
  • 1
  • It's covert pptx to png! – vio ao Mar 10 '16 at 07:22
  • Possible duplicate of [What is a Null Pointer Exception, and how do I fix it?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) – Jens Mar 10 '16 at 07:24
  • 1
    Did you try with Apache POI 3.14? And if not, what happens when you upgrade? – Gagravarr Mar 10 '16 at 09:10
  • 1
    File a bug in the bugzilla and most important ADD THE PPTX-FILE. I'll have a look on it ... if you mind publicly sharing the file, you can also send it to my @apache.org email – kiwiwings Mar 16 '16 at 20:47

0 Answers0