1. 테이블 생성
생성한 파워포인트 파일에 슬라이드 추가 후 슬라이드에 테이블을 생성하고 그 크기를 정할 수 있다. 테이블의 내부 셀 크기에 따라 크기가 달라지므로 이전의 이미지 삽입과 달리 시작 지점의 x좌표, y좌표만을 정해줬다. 만약 테이블 생성 시(createTable) 인자로 로우 수와 컬럼 수를 지정해준다면, 로우 추가 시에 셀을 추가하지 않아도 해당 컬럼 수 만큼 셀이 생성된다. 때문에 그럴 경우에는 row.getCells().get(컬럼 인덱스)의 방식으로 해당 셀에 접근해야 한다. (Paragraph까지는 자동으로 생성해주나. 따라서 접근한 Cell에 getParagraphs().get(idx);를 통해 Paragraph에 접근한 뒤 TextRun 역시 같은 방법으로 접근하려 하면 null이라는 오류가 발생할 것이다. 또한 해당 셀에 Paragraph를 생성하고 여기에 다시 TextRun을 추가하면 한 줄 띄움이 된 후 텍스트가 입력된다. 텍스트를 입력하고 속성을 변경해주고자 할 때에는 XSLFTextRun를 새로 생성해줘야 한다는 것에 유의하자.)
XSLFSlideShow ppt = new XMLSlideShow();
XSLFSlide slide = ppt.createSlide();
XSLFTable tbl = slide.createTable(); // 인자로 로우 수와 컬럼 수를 지정해줄 수도 있다.
tbl.setAnchor(new Rectangle(new Point(x좌표, y좌표)));
2. 로우 생성 및 셀 추가
XSLFTableRow row1 = tbl.addRow();
row1.setRowHeight((double) 20); // double 타입으로 로우 높이 설정 가능(default : 20)
XSLFTableCell cell1 = row1.addCell();
3. 셀 내부에 텍스트 입력
단순히 cell.setText()를 통해 셀에 텍스트를 추가할 수도 있지만 이럴 경우 글자 크기, 색상 등 상세한 설정을 할 수 없어 Paragraph(문단) 생성 후 Run(텍스트 객체라고 볼 수 있음)을 추가해 이 Run의 속성을 변경해주는 것이 좋다. 아래의 예 외에도 margin이나 폰트 등 다양하게 설정할 수 있다.
XSLFParagraph paragraph = cell1.addParagraph();
XSLFTextRun text = paragraph.addNewTextRun();
paragraph.setTextAlign(TextAlign.CENTER); // 텍스트 정렬 설정
text.setText("텍스트 입력"); // 텍스트 내용 입력
text.setBold(true); // Bold 설정
text.setFontSize((double) 12.0); // double타입으로 폰트 크기 설정
4. 셀 테두리 설정
불행히도 한 방향의 테두리마다 일일히 설정해주어야 한다.
cell1.setBorderColor(BorderEdge.top, Color.BLACK);
cell1.setBorderColor(BorderEdge.right, Color.BLACK);
cell1.setBorderColor(BorderEdge.bottom, Color.BLACK);
cell1.setBorderColor(BorderEdge.left, Color.BLACK);
5. 셀 너비 설정
처음에는 XSLFTableCell 타입의 인스턴스에 setWidth함수를 사용해보려 했으나 적용되지 않는 것을 보고 다른 방향에서 접근했다.
int count = tbl.getNumberOfColumns(); // 테이블의 컬럼 수
tbl.setColumnWidth(컬럼인덱스, double 타입의 셀 너비);
파워포인트를 Java코드로 만드는 것은 엑셀과 달리 많은 하드코딩이 필요하다고 느꼈다. 이런 점에서 많이 아쉽지만 그래도 오픈소스 라이브러리가 많지 않은 이상 여기에 만족해야겠지...ㅎ 파워포인트 내부에 입력해줘야 할 컨텐츠가 많아질 수록, 그리고 그 컨텐츠가 서로 중복되지 않을 수록 많은 노가다가 필요한 것 같다..
'Backend > Spring' 카테고리의 다른 글
Spring) 바이너리 파일을 DB에 저장 후 요청에 의해 바로 다운로드하기 (0) | 2021.12.06 |
---|---|
Spring) Poi와 Jxls를 사용해 Template을 이용한 워드 다운로드 (0) | 2021.12.06 |
Spring) Poi와 Jxls를 사용해 Template을 이용한 파워포인트 다운로드 (0) | 2021.11.21 |
Spring) JXLS, POI 버전 문제 (0) | 2021.10.17 |
Spring) Poi와 Jxls를 사용해 Template을 이용한 엑셀 다운로드 (0) | 2021.09.06 |