En este tutorial aprenderás como convertir una presentación a PDF, ya sea un archivo de Microsoft PowerPoint a PDF o convertir una presentación de open office incluso con Java, agregando cada diapositiva como imagen al PDF. Espero te sea de utilidad.
Usaré mis dependencias con Maven configurando el archivo pom.xml agregando iText en la sección de dependencias:
<!--conversión de txt a pdf-->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency> Después dependiendo de si queremos usar Microsoft Power Point u open office elegimos la dependencia adecuada de poi.
Para el caso de Microsoft Power Point agregamos:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.13</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.9</version>
</dependency> Para convertir usando código de open office agregamos:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.13</version>
</dependency> package org.javapro.pdf.util;
import com.lowagie.text.BadElementException;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;
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;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.*;
/**
* Created by Javatlacati on 14/12/2016.
*/public class PPTToPDF {
public static void main(String[] args) {
try {
PPTToPDF.convertPPTToPDF("/miruta/mippt.pptx", "/miruta/mipps.pdf", ".pptx");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void convertPPTToPDF(String sourcepath, String destinationPath, String fileType) {
double zoom = 2;
AffineTransform at = new AffineTransform();
at.setToScale(zoom, zoom);
Document pdfDocument = new Document();
byte[] barr = new byte[0];
try (FileInputStream inputStream = new FileInputStream(sourcepath);
ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
PdfWriter pdfWriter = PdfWriter.getInstance(pdfDocument, baos);
PdfPTable table = new PdfPTable(1);
pdfWriter.open();
pdfDocument.open();
Dimension pgsize = null;
com.lowagie.text.Image slideImage = null;
BufferedImage img = null;
if (fileType.equalsIgnoreCase(".ppt")) {
SlideShow ppt = new SlideShow(inputStream);
pgsize = ppt.getPageSize();
Slide slide[] = ppt.getSlides();
pdfDocument.setPageSize(new com.lowagie.text.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 = com.lowagie.text.Image.getInstance(img, null);
table.addCell(new PdfPCell(slideImage, true));
}
}
if (fileType.equalsIgnoreCase(".pptx")) {
XMLSlideShow ppt = new XMLSlideShow(inputStream);
pgsize = ppt.getPageSize();
java.util.List<org.apache.poi.xslf.usermodel.XSLFSlide> slide = ppt.getSlides();
pdfDocument.setPageSize(new com.lowagie.text.Rectangle((float) pgsize.getWidth(), (float) pgsize.getHeight()));
pdfWriter.open();
pdfDocument.open();
for (XSLFSlide slid : slide) {
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));
slid.draw(graphics);
graphics.getPaint();
slideImage = com.lowagie.text.Image.getInstance(img, null);
table.addCell(new PdfPCell(slideImage, true));
}
}
pdfDocument.add(table);
pdfDocument.close();
barr = baos.toByteArray();
pdfWriter.close();
System.out.println("Powerpoint file converted to PDF successfully");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (BadElementException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
try (FileOutputStream outputStream = new FileOutputStream(new File(destinationPath))) {
outputStream.write(barr);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
} Como podrás apreciar, esta vez AWT ha hecho su magia, otro enfoque alternativo que podrías necesitar es el extraer el texto e ir agregando párrafo por párrafo, pero podrías experimentar pérdidas en el formato en tu conversión de powerpoint a PDF.
Nota: itext es de paga si lo usas para proyectos comerciales.
Tal vez también te interese como convertir de cadena a PDF
Te comparto aquí mis recomendaciones de cursos de Código Facilito. Codigofacilito.com es una plataforma virtual…
Te comparto aquí mis recomendaciones de cursos de Linkedin Learning. LinkedIn Learning es una plataforma…
Estos snippets de código para entrevista acerca de mockito espero te sean de mucha utilidad.…
En este tutorial aprenderá a usar expresiones regulares en Java de manera práctica para contar…
¿Entrevista de programación Java fullstack? No te preocupes, te tengo un compendio de preguntas de…
Te recomiendo algunos cursos de Udemy para mejorar tus softskills y así mejorar en tu…