lenguajes de programación

Java: Mostrar Presentación PowerPoint en Ventana

La librería apache poi ha cambiado mucho pues su enfoque ha cambiado de generar reportes a leer reportes y/o usarlos como plantilla, por lo que si quieres mostrar una presentación será una tarea difícil ya que ahora no te permite acceder a las coordenadas de los elementos, pero de todas formas te muestro aquí una manera de poder pintar esa presentación sin preocuparte de más por batallar con la lectura de todos los elementos internos y en unas pocas líneas de código.

Cargar presentación PowerPoint en un JFrame

  1. Agrega las librerías requeridas a tu archivo de configuración

    En mi caso agrego en el pom.xml lo siguiente:
    <dependencies>
    <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>5.2.3</version>
    <scope>compile</scope>
    </dependency>
    <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.2</version>
    <scope>compile</scope>
    </dependency>
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.19.0</version>
    </dependency>
    </dependencies>

  2. Crea tu componente para mostrar la diapositiva

    En este caso debe de tener un constructor que nos asegure que siempre vamos a tener una diapositiva. Este componente esta hecho solamente para para mostrar presentación powerpoint una diapositiva a la vez

    public class SlideComponent extends JPanel {
    private final Slide<?,?> slide;

    public SlideComponent(Slide<?,?> slide) {
    this.slide = slide;
    }

  3. Delega el pintado en el componente de diapositiva a la diapositiva

    Sobreescribiremos el metodo paintComponent para personalizar el pintado

    protected void paintComponent(Graphics g){
    Graphics2D g2d = (Graphics2D) g;
    slide.draw(g2d);
    }

  4. Leer un archivo mediante un dialogo de selección de archivo

    Aquí usaremos un JFileChooser y le pondremos por defecto un filtro para que solo abra archivos con las extensiones deseadas

    JFileChooser fileChooser = new JFileChooser();
    fileChooser.setFileFilter(new FileNameExtensionFilter("Power point presentation", "ppt", "pptx"));
    if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
    File presentationppt = fileChooser.getSelectedFile();

  5. Cargar dependiendo de la extensión de la presentación

    La clase Slideshow tiene los métodos comunes, pero deberemos de usar el tipo concreto para leer el archivo con la presentación, los archivos .ppt son de tipo HSLFSlideShow y los .pptx son de tipo XMLSlideShow.

    try (FileInputStream inputStream = new FileInputStream(presentationppt)) {
    SlideShow slideShow = presentationppt.getName().endsWith(".ppt") ? new HSLFSlideShow(inputStream) : new XMLSlideShow(inputStream);

  6. Cargamos la lista de diapositivas

    En este caso crearemos un componente por cada diapositiva y le agregaremos escuchas de eventos, aunque se puede resolver de maneras más optimas. Incluso si lo deseas puedes agregar todas a la vista y el scroll se encargará de mostrarlas una junto a la otra

    List slides = slideShow.getSlides();
    for (Slide slide : slides) {
    SlideComponent slideComponent = new SlideComponent(slide);
    addListenersToSlideComponent(slideComponent);
    sliderComponents.add(slideComponent);
    }

  7. cargamos la diapositiva actual para mostrar una a la vez

    En mi caso para simplificar el proceso de repintado tengo un JScrollPane y al llamar al método setViewportView podemos controlar que cosa se muestra dentro.

    SlideComponent firstSlide = sliderComponents.get(currentSlide);
    jspanel.setViewportView(firstSlide);

Herramientas
  • Maven
    IDE (Netbeans, IntelliJ, Eclipse)
Materiales
  • Apache poi-scratchpad
    Apache poi-ooxml

Código completo

Como siempre el código de ejemplo para mostrar presentación de powerpoint en un JFrame de manera interactiva puedes hallarlo en mi cuenta de github.

Si te ha gustado la librería poi para trabajar con presentaciones usando Java, puede que también te interese usarla para convertir de powerpoint a PDF.

javatlacati

Entradas recientes

Cursos de Código Facilito

Te comparto aquí mis recomendaciones de cursos de Código Facilito. Codigofacilito.com es una plataforma virtual…

2 meses hace

Cursos de LinkedIn Learning

Te comparto aquí mis recomendaciones de cursos de Linkedin Learning. LinkedIn Learning es una plataforma…

4 meses hace

Mockito: Snippets de código

Estos snippets de código para entrevista acerca de mockito espero te sean de mucha utilidad.…

4 meses hace

Expresiones regulares en Java: analizar un String

En este tutorial aprenderá a usar expresiones regulares en Java de manera práctica para contar…

4 meses hace

Preguntas para entrevista de programación Java full-stack

¿Entrevista de programación Java fullstack? No te preocupes, te tengo un compendio de preguntas de…

5 meses hace

SoftSkills: cursos de Udemy

Te recomiendo algunos cursos de Udemy para mejorar tus softskills y así mejorar en tu…

5 meses hace