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
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>
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 vezpublic class SlideComponent extends JPanel {
private final Slide<?,?> slide;
public SlideComponent(Slide<?,?> slide) {
this.slide = slide;
}
Sobreescribiremos el metodo paintComponent para personalizar el pintadoprotected void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D) g;
slide.draw(g2d);
}
Aquí usaremos un JFileChooser y le pondremos por defecto un filtro para que solo abra archivos con las extensiones deseadasJFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Power point presentation", "ppt", "pptx"));
if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
File presentationppt = fileChooser.getSelectedFile();
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);
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 otraList slides = slideShow.getSlides();
for (Slide slide : slides) {
SlideComponent slideComponent = new SlideComponent(slide);
addListenersToSlideComponent(slideComponent);
sliderComponents.add(slideComponent);
}
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);
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.
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…