2016-08-24 279 views
-1

我正在制作一个JavaFX应用程序,它将PowerPoint转换为PDF。但我得到这个错误:java.io.IOException:文档没有页面。 - PowerPoint to PDF

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"); 

    } 

} 

回答

1

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

当您使用以下命令获得扩展名时,它将返回“。”。即(PPT或PPTX)

String fileType=FilenameUtils.getExtension(destination); 

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

fileType.equalsIgnoreCase("ppt") 

fileType.equalsIgnoreCase("pptx")