[JAVA-9345] Split apache-poi module

This commit is contained in:
Haroon Khan
2022-01-06 22:57:49 +00:00
parent 22c2742bdb
commit f27941b044
11 changed files with 42 additions and 22 deletions
@@ -1,224 +0,0 @@
package com.baeldung.poi.powerpoint;
import org.apache.poi.sl.usermodel.AutoNumberingScheme;
import org.apache.poi.sl.usermodel.PictureData;
import org.apache.poi.sl.usermodel.TableCell;
import org.apache.poi.sl.usermodel.TextParagraph;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xslf.usermodel.*;
import java.awt.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Helper class for the PowerPoint presentation creation
*/
public class PowerPointHelper {
/**
* Read an existing presentation
*
* @param fileLocation
* File location of the presentation
* @return instance of {@link XMLSlideShow}
* @throws IOException
*/
public XMLSlideShow readingExistingSlideShow(String fileLocation) throws IOException {
return new XMLSlideShow(new FileInputStream(fileLocation));
}
/**
* Create a sample presentation
*
* @param fileLocation
* File location of the presentation
* @throws IOException
*/
public void createPresentation(String fileLocation) throws IOException {
// Create presentation
XMLSlideShow ppt = new XMLSlideShow();
XSLFSlideMaster defaultMaster = ppt.getSlideMasters().get(0);
// Retriving the slide layout
XSLFSlideLayout layout = defaultMaster.getLayout(SlideLayout.TITLE_ONLY);
// Creating the 1st slide
XSLFSlide slide1 = ppt.createSlide(layout);
XSLFTextShape title = slide1.getPlaceholder(0);
// Clearing text to remove the predefined one in the template
title.clearText();
XSLFTextParagraph p = title.addNewTextParagraph();
XSLFTextRun r1 = p.addNewTextRun();
r1.setText("Baeldung");
r1.setFontColor(new Color(78, 147, 89));
r1.setFontSize(48.);
// Add Image
ClassLoader classLoader = getClass().getClassLoader();
byte[] pictureData = IOUtils.toByteArray(new FileInputStream(classLoader.getResource("logo-leaf.png").getFile()));
XSLFPictureData pd = ppt.addPicture(pictureData, PictureData.PictureType.PNG);
XSLFPictureShape picture = slide1.createPicture(pd);
picture.setAnchor(new Rectangle(320, 230, 100, 92));
// Creating 2nd slide
layout = defaultMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);
XSLFSlide slide2 = ppt.createSlide(layout);
// setting the tile
title = slide2.getPlaceholder(0);
title.clearText();
XSLFTextRun r = title.addNewTextParagraph().addNewTextRun();
r.setText("Baeldung");
// Adding the link
XSLFHyperlink link = r.createHyperlink();
link.setAddress("http://www.baeldung.com");
// setting the content
XSLFTextShape content = slide2.getPlaceholder(1);
content.clearText(); // unset any existing text
content.addNewTextParagraph().addNewTextRun().setText("First paragraph");
content.addNewTextParagraph().addNewTextRun().setText("Second paragraph");
content.addNewTextParagraph().addNewTextRun().setText("Third paragraph");
// Creating 3rd slide - List
layout = defaultMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);
XSLFSlide slide3 = ppt.createSlide(layout);
title = slide3.getPlaceholder(0);
title.clearText();
r = title.addNewTextParagraph().addNewTextRun();
r.setText("Lists");
content = slide3.getPlaceholder(1);
content.clearText();
XSLFTextParagraph p1 = content.addNewTextParagraph();
p1.setIndentLevel(0);
p1.setBullet(true);
r1 = p1.addNewTextRun();
r1.setText("Bullet");
// the next three paragraphs form an auto-numbered list
XSLFTextParagraph p2 = content.addNewTextParagraph();
p2.setBulletAutoNumber(AutoNumberingScheme.alphaLcParenRight, 1);
p2.setIndentLevel(1);
XSLFTextRun r2 = p2.addNewTextRun();
r2.setText("Numbered List Item - 1");
// Creating 4th slide
XSLFSlide slide4 = ppt.createSlide();
createTable(slide4);
// Save presentation
FileOutputStream out = new FileOutputStream(fileLocation);
ppt.write(out);
out.close();
// Closing presentation
ppt.close();
}
/**
* Delete a slide from the presentation
*
* @param ppt
* The presentation
* @param slideNumber
* The number of the slide to be deleted (0-based)
*/
public void deleteSlide(XMLSlideShow ppt, int slideNumber) {
ppt.removeSlide(slideNumber);
}
/**
* Re-order the slides inside a presentation
*
* @param ppt
* The presentation
* @param slideNumber
* The number of the slide to move
* @param newSlideNumber
* The new position of the slide (0-base)
*/
public void reorderSlide(XMLSlideShow ppt, int slideNumber, int newSlideNumber) {
List<XSLFSlide> slides = ppt.getSlides();
XSLFSlide secondSlide = slides.get(slideNumber);
ppt.setSlideOrder(secondSlide, newSlideNumber);
}
/**
* Retrieve the placeholder inside a slide
*
* @param slide
* The slide
* @return List of placeholder inside a slide
*/
public List<XSLFShape> retrieveTemplatePlaceholders(XSLFSlide slide) {
List<XSLFShape> placeholders = new ArrayList<>();
for (XSLFShape shape : slide.getShapes()) {
if (shape instanceof XSLFAutoShape) {
placeholders.add(shape);
}
}
return placeholders;
}
/**
* Create a table
*
* @param slide
* Slide
*/
private void createTable(XSLFSlide slide) {
XSLFTable tbl = slide.createTable();
tbl.setAnchor(new Rectangle(50, 50, 450, 300));
int numColumns = 3;
int numRows = 5;
// header
XSLFTableRow headerRow = tbl.addRow();
headerRow.setHeight(50);
for (int i = 0; i < numColumns; i++) {
XSLFTableCell th = headerRow.addCell();
XSLFTextParagraph p = th.addNewTextParagraph();
p.setTextAlign(TextParagraph.TextAlign.CENTER);
XSLFTextRun r = p.addNewTextRun();
r.setText("Header " + (i + 1));
r.setBold(true);
r.setFontColor(Color.white);
th.setFillColor(new Color(79, 129, 189));
th.setBorderWidth(TableCell.BorderEdge.bottom, 2.0);
th.setBorderColor(TableCell.BorderEdge.bottom, Color.white);
// all columns are equally sized
tbl.setColumnWidth(i, 150);
}
// data
for (int rownum = 0; rownum < numRows; rownum++) {
XSLFTableRow tr = tbl.addRow();
tr.setHeight(50);
for (int i = 0; i < numColumns; i++) {
XSLFTableCell cell = tr.addCell();
XSLFTextParagraph p = cell.addNewTextParagraph();
XSLFTextRun r = p.addNewTextRun();
r.setText("Cell " + (i * rownum + 1));
if (rownum % 2 == 0) {
cell.setFillColor(new Color(208, 216, 232));
} else {
cell.setFillColor(new Color(233, 247, 244));
}
}
}
}
}
@@ -1,91 +0,0 @@
package com.baeldung.poi.word;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class WordDocument {
public static String logo = "logo-leaf.png";
public static String paragraph1 = "poi-word-para1.txt";
public static String paragraph2 = "poi-word-para2.txt";
public static String paragraph3 = "poi-word-para3.txt";
public static String output = "rest-with-spring.docx";
public void handleSimpleDoc() throws Exception {
XWPFDocument document = new XWPFDocument();
XWPFParagraph title = document.createParagraph();
title.setAlignment(ParagraphAlignment.CENTER);
XWPFRun titleRun = title.createRun();
titleRun.setText("Build Your REST API with Spring");
titleRun.setColor("009933");
titleRun.setBold(true);
titleRun.setFontFamily("Courier");
titleRun.setFontSize(20);
XWPFParagraph subTitle = document.createParagraph();
subTitle.setAlignment(ParagraphAlignment.CENTER);
XWPFRun subTitleRun = subTitle.createRun();
subTitleRun.setText("from HTTP fundamentals to API Mastery");
subTitleRun.setColor("00CC44");
subTitleRun.setFontFamily("Courier");
subTitleRun.setFontSize(16);
subTitleRun.setTextPosition(20);
subTitleRun.setUnderline(UnderlinePatterns.DOT_DOT_DASH);
XWPFParagraph image = document.createParagraph();
image.setAlignment(ParagraphAlignment.CENTER);
XWPFRun imageRun = image.createRun();
imageRun.setTextPosition(20);
Path imagePath = Paths.get(ClassLoader.getSystemResource(logo).toURI());
imageRun.addPicture(Files.newInputStream(imagePath), XWPFDocument.PICTURE_TYPE_PNG, imagePath.getFileName().toString(), Units.toEMU(50), Units.toEMU(50));
XWPFParagraph sectionTitle = document.createParagraph();
XWPFRun sectionTRun = sectionTitle.createRun();
sectionTRun.setText("What makes a good API?");
sectionTRun.setColor("00CC44");
sectionTRun.setBold(true);
sectionTRun.setFontFamily("Courier");
XWPFParagraph para1 = document.createParagraph();
para1.setAlignment(ParagraphAlignment.BOTH);
String string1 = convertTextFileToString(paragraph1);
XWPFRun para1Run = para1.createRun();
para1Run.setText(string1);
XWPFParagraph para2 = document.createParagraph();
para2.setAlignment(ParagraphAlignment.RIGHT);
String string2 = convertTextFileToString(paragraph2);
XWPFRun para2Run = para2.createRun();
para2Run.setText(string2);
para2Run.setItalic(true);
XWPFParagraph para3 = document.createParagraph();
para3.setAlignment(ParagraphAlignment.LEFT);
String string3 = convertTextFileToString(paragraph3);
XWPFRun para3Run = para3.createRun();
para3Run.setText(string3);
FileOutputStream out = new FileOutputStream(output);
document.write(out);
out.close();
document.close();
}
public String convertTextFileToString(String fileName) {
try (Stream<String> stream = Files.lines(Paths.get(ClassLoader.getSystemResource(fileName).toURI()))) {
return stream.collect(Collectors.joining(" "));
} catch (IOException | URISyntaxException e) {
e.printStackTrace();
}
return null;
}
}