https://github.com/neolord0/hwplib
hwplib 을 이용해서 파일의 표을 읽어 콘솔로 출력하는 코드
필요한 데이터들이 표로 작성되어 있어서 표에서 긁어오는 코드를 위주로 작성했는데,
다양한 문서 내용을 git의 sample 에서 확인 할 수 있다.
실행은 코드에서 main 부분을 실행하는 형태로 했었는데,
sample에서 실행해보려니 빌드 에러 발생부터 잡아야해서
기존에 만들었던 코드에서 표 읽는 부분만 sample 코드로 다시 정리했다.
1. 출력결과
오후 6:17:25: Executing ':HwpReaderExample.main()'...
> Task :compileJava
> Task :processResources NO-SOURCE
> Task :classes
> Task :HwpReaderExample.main()
========== 학생 성적표 ==========
번호
| 이름
| 수학
| 영어
| 과학
|
1
| 철수
| 85
| 90
| 95
|
2
| 영희
| 88
| 92
| 89
|
3
| 민수
| 92
| 85
| 90
|
4
| 지혜
| 90
| 93
| 88
|
Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
For more on this, please refer to https://docs.gradle.org/8.4/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
BUILD SUCCESSFUL in 609ms
2 actionable tasks: 2 executed
오후 6:17:26: Execution finished ':HwpReaderExample.main()'.
2. main 코드
package org.example;
import kr.dogfoot.hwplib.object.HWPFile;
import kr.dogfoot.hwplib.object.bodytext.Section;
import kr.dogfoot.hwplib.object.bodytext.control.Control;
import kr.dogfoot.hwplib.object.bodytext.control.ControlTable;
import kr.dogfoot.hwplib.object.bodytext.control.ControlType;
import kr.dogfoot.hwplib.object.bodytext.control.table.Cell;
import kr.dogfoot.hwplib.object.bodytext.control.table.Row;
import kr.dogfoot.hwplib.object.bodytext.paragraph.Paragraph;
import kr.dogfoot.hwplib.reader.HWPReader;
import kr.dogfoot.hwplib.tool.objectfinder.ControlFilter;
import kr.dogfoot.hwplib.tool.objectfinder.ControlFinder;
import java.io.IOException;
import java.util.ArrayList;
public class HwpReaderExample implements ControlFilter {
@Override
public boolean isMatched(Control control, Paragraph paragraph, Section section) {
return control.getType() == ControlType.Table;
}
public void readAndPrintTable(String filePath) {
try {
HWPFile hwpFile = HWPReader.fromFile(filePath);
if (hwpFile != null) {
ArrayList<Control> result = ControlFinder.find(hwpFile, this);
if (result != null && !result.isEmpty()) {
Control control = result.get(0); // 첫 번째 테이블 가져오기
ControlTable table = (ControlTable) control;
System.out.println("========== 학생 성적표 ==========");
for (Row row : table.getRowList()) {
for (Cell cell : row.getCellList()) {
System.out.print(cell.getParagraphList().getNormalString() + " | ");
}
System.out.println();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
HwpReaderExample hwpReader = new HwpReaderExample();
String filePath = "./doc/학생 성적표.hwp"; // 예시 파일 경로
if (hwpReader.isHwpFile(filePath)) {
hwpReader.readAndPrintTable(filePath);
} else {
System.out.println("확장자가 hwp나 hwpx가 아닌 파일은 실행할 수 없습니다: " + filePath);
}
}
public boolean isHwpFile(String filename) {
String extension = "";
int lastDotIndex = filename.lastIndexOf('.');
if (lastDotIndex > 0) {
extension = filename.substring(lastDotIndex + 1);
}
return extension.equalsIgnoreCase("hwp") || extension.equalsIgnoreCase("hwpx");
}
}
3. gradle
plugins {
id 'java'
}
group = 'org.example'
version = '1.0-SNAPSHOT'
java {
sourceCompatibility = '1.8'
}
repositories {
mavenCentral()
}
dependencies {
// hwp reader를 위한 Apach POI
// https://archive.apache.org/dist/poi/release/bin/ 에서 수동으로 받아서 설치해야만 HWPF 가 있음.
// hwpf 가 있어야만, hwp 파일을 read 할 수 있는데, apache 에서 폐기했기 때문에 접근 방식이 너무 좋지 않아서 다른 lib를 찾기를 시도함.
// implementation 'org.apache.poi:poi:3.17'
// implementation 'org.apache.poi:poi-ooxml:3.17'
// HwpTableReader 개발
// https://mvnrepository.com/artifact/kr.dogfoot/hwplib
implementation 'kr.dogfoot:hwplib:1.1.4'
// csv 파일 저장
implementation 'com.opencsv:opencsv:5.5.2'
testImplementation platform('org.junit:junit-bom:5.9.1')
testImplementation 'org.junit.jupiter:junit-jupiter'
}
test {
useJUnitPlatform()
}
'학습 > Java_Spring' 카테고리의 다른 글
Mybatis일때 Controller에서의 페이징처리 (0) | 2024.06.24 |
---|---|
자주 사용한 애너테이션 정리 (0) | 2024.06.24 |
Spring Boot에서 하나의 JAR 파일로 빌드하고, 각기 다른 포트로 'admin'과 'user' 컨트롤러를 구분하기 (0) | 2024.06.24 |
Spring Boot 애플리케이션에서 CORS(Cross-Origin Resource Sharing)를 설정 (0) | 2024.06.23 |
openjdk 설치 (0) | 2024.06.21 |