java.io.IOException: 文档没有页面。 - PowerPoint 转 PDF

java.io.IOException: The document has no pages. - PowerPoint to PDF

我正在制作一个将 PowerPoint 转换为 PDF 的 JavaFX 应用程序。但我收到此错误:

ExceptionConverter: java.io.IOException: The document has no pages

我尝试了很多 ppt 文件,但没有任何效果。对于所有文件,我都会收到此错误。我不知道出了什么问题。

package application;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

import org.apache.commons.io.FilenameUtils;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.usermodel.SlideShow;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;

   public class PPView {




    public static void showPowerPoint(File sFiles) throws Exception {

    File file = new File(sFiles.getAbsolutePath());
    String name=file.getName();
    String destination= file.getAbsolutePath();
    String outDestination=file.getParent();
    String fileType=FilenameUtils.getExtension(destination);

    FileInputStream is = new FileInputStream(file);

    double zoom = 2;

        AffineTransform at = new AffineTransform();
        at.setToScale(zoom, zoom);

        Document pdfDocument = new Document();
        FileOutputStream outputStream = new FileOutputStream(outDestination+name+".pdf");

        PdfWriter pdfWriter = PdfWriter.getInstance(pdfDocument, outputStream);
        PdfPTable table = new PdfPTable(1);

        pdfWriter.open();
        pdfDocument.open();

        Dimension pgsize = null;
        Image slideImage = null;
        BufferedImage img = null;

        if (fileType.equalsIgnoreCase(".ppt")) {

            SlideShow ppt = new SlideShow(is);
            pgsize = ppt.getPageSize();
            Slide slide[] = ppt.getSlides();

            pdfDocument.setPageSize(new Rectangle((float) pgsize.getWidth(), (float) pgsize.getHeight()));
            pdfWriter.open();
            pdfDocument.open();

            for (int i = 0; i < slide.length; i++) {
                img = new BufferedImage((int) Math.ceil(pgsize.width * zoom), (int) Math.ceil(pgsize.height * zoom), BufferedImage.TYPE_INT_RGB);
                Graphics2D graphics = img.createGraphics(); 
                graphics.setTransform(at);

                graphics.setPaint(Color.white);
                graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
                slide[i].draw(graphics);
                graphics.getPaint();
                slideImage = Image.getInstance(img, null);
                table.addCell(new PdfPCell(slideImage, true));
         }
    }

         if (fileType.equalsIgnoreCase(".pptx")) {

            XMLSlideShow ppt = new XMLSlideShow(is);
            pgsize = ppt.getPageSize();
            XSLFSlide slide[] = ppt.getSlides();
            pdfDocument.setPageSize(new Rectangle((float) pgsize.getWidth(), (float) pgsize.getHeight()));
            pdfWriter.open();
            pdfDocument.open();

                for (int i = 0; i < slide.length; i++) {
                img = new BufferedImage((int) Math.ceil(pgsize.width * zoom), (int) Math.ceil(pgsize.height * zoom), BufferedImage.TYPE_INT_RGB);
                Graphics2D graphics = img.createGraphics();
                graphics.setTransform(at);

                graphics.setPaint(Color.white);
                graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
                slide[i].draw(graphics);
                graphics.getPaint();
                slideImage = Image.getInstance(img, null);
                table.addCell(new PdfPCell(slideImage, true));

          }
      }

          pdfDocument.add(table);
          pdfDocument.close();
          pdfWriter.close();
          System.out.println("Powerpoint file converted to PDF successfully");

   }

}

异常是因为实际转换没有发生并且文档是空的。

当您使用以下命令获取扩展名时,它将 return 不带“.”即(ppt 或 pptx)

String fileType=FilenameUtils.getExtension(destination);

所以你需要改变你的if条件如下

fileType.equalsIgnoreCase("ppt")

fileType.equalsIgnoreCase("pptx")