티스토리 뷰
728x90
반응형
기존에 pdf를 생성하려고 하면 프론트 단에서 css를 이용하거나 js를 이용해서 처리할 수 가 있다.
하지만 지금 정리하고 있는 내용은 조금 사뭇 다른 내용이다....
클라이언트로부터 등록하는 정보에 대한 pdf를 만드는 내용이다.
여기까지만 들었을 때는 그냥 정보가 등록되고 나면 해당 등록된 화면에서 스크립트 처리하면 되겠지 하지만 막상 세세하게 내용을 열어보면 다르다.
등록된 정보들을 토대로 조회했을 때 pdf 파일들을 뽑을 수 있도록 하는 것이다.
Spring 에서는 MVC 개념으로 해당 데이터를 db로 부터 가져와서 view 단에 뿌려주는 형식이다.
그렇다보니 기본적인 pdf 파일로 변환하는건 거진 데이터가 뿌려지는 view단에서 스크립트를 통해 처리를 하게 된다.
하지만 지금은 그와 다른 형식으로 검색을 하면 자동적으로 pdf 파일들이 압축되어 다운로드가 되어야한다.
그렇게 하기 위해서는 서버단인 Controller에서 데이터 정보들을 pdf 파일화 작업을 진행하여 그 파일 정보들을 압축시켜 다운로드 될 수 있도록 해야하는 것이다.
데이터들도 매번 다른 정보가 등록되기 떄문에 고민이 됬다.
그래서 생각한 방식은 Thymeleaf를 이용하여 서버단에서 탬플릿 파일로 저장을 해두고 동적인 데이터를 파일화 하여 처리하는 방식이었다.
Thymeleaf는 일종의 탬플릿으로 jstl 과 비스무리한 방식이다 흔히 Spring , java, jsp 에서 사용되는 탬플릿이다.
이 탬플릿을 이용하여 서버단에서 데이터가 등록되는 동시에 pdf 파일을 생성할 수가 있다.
생성 방법
Thymeleaf 와 관련덴 라이브러리 파일을 선언
pom.xml
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
resource 아래에 html 파일 생성
예시)
Thymeleaf 를 해당 html에 선언하고 해당 아래 이미지 처럼 Thymeleaf 처리 메소드를 이용하여 데이터를 맞게 추가
html을 String으로 변경처리해줄 메소드 선언package kr.co.iacts.smartcms.modules.bizmoney.util; import java.util.Map; import org.thymeleaf.context.Context; import org.thymeleaf.spring5.SpringTemplateEngine; import org.thymeleaf.templatemode.TemplateMode; import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; public class ThymeleafParser { //fileName : 확장명을 제외한 양식 html 명 //variableMap : 해당 html에 들어가는 파일 데이터 public static String parseHtmlFileToString(String fileName, Map<String,Object> variableMap) { String result = ""; try { final ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(); templateResolver.setPrefix("/templates/thymeleaf/"); //html 정보가 있는 경로 templateResolver.setSuffix(".html");//html 확장명 templateResolver.setTemplateMode(TemplateMode.HTML); templateResolver.setCharacterEncoding("UTF-8"); templateResolver.setCacheable(false); final SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver); final Context context = new Context(); context.setVariables(variableMap); result = templateEngine.process(fileName, context); }catch (Exception e) { e.printStackTrace(); } return result; } }
String화 한 html을 pdf로 변환하는 처리 방식 itextpdf 를 이용하여 처리
itextpdf 라이브러리 선언
pom.xml
<!-- html -> pdf 화 작업을 위한 라이브러리 itext -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.9</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-pdfa</artifactId>
<version>5.5.9</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-xtra</artifactId>
<version>5.5.9</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.9</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>html2pdf</artifactId>
<version>2.0.2</version>
</dependency>
html을 pdf로 변환 처리 메소드
public static void convertHtmlToPdf(String html, String path, String fontPath) throws IOException {
ConverterProperties properties = new ConverterProperties();
FontProvider fontProvider = new DefaultFontProvider(false,false,false);
FontProgram fontProgram = FontProgramFactory.createFont(fontPath+"malgun.ttf"); //폰트 파일
fontProvider.addFont(fontProgram);
properties.setFontProvider(fontProvider);
HtmlConverter.convertToPdf(html, new FileOutputStream(path), properties);
// List<IElement> elements = HtmlConverter.convertToElements(html,properties);
// PdfDocument pdf = new PdfDocument(new PdfWriter("D:/temp/upload/gnepabizmoney/"+vo.getAppNum()+".pdf"));
// Document document = new Document(pdf);
// document.setMargins(25, 0, 25, 0);
// for (IElement element : elements) {
// document.add((IBlockElement) element);
// }
// document.close();
}
※알아야할 사항 : 폰트 같은 경우 ttf 파일을 등록하여 경로를 지정해서 불러서 사용할 수 있도록 해야함
파일 처리 해보기
//html -> pdf 변환 및 생성
String html = ThymeleafParser.parseHtmlFileToString("temp_file_html",variableMap);//html -> string 처리
PdfGenerator.convertHtmlToPdf(html,path+"테스트파일_"+".pdf", fontPath); //pdf 생성
변수 html 은 Thymeleaf 파일에 등록된 데이터들 포함 양식을 string으로 뽑아 올 수 있다.
뽑아서 해당 Html을 pdf화하여 파일을 저장한다.
728x90
반응형
'프로그램 언어 > Spring' 카테고리의 다른 글
Spring boot 3.x.x 에서의 Swagger적용 방법 (gradle 기준) (1) | 2023.11.28 |
---|---|
Rest API 요청 시 PKIX path build failed 에러 발생관련 이슈 처리 방법(경험담 포함..) (0) | 2023.05.29 |
Spring(Boot) FilterRegistrationBean를 사용 시 @Autowired 사용주의 (0) | 2023.05.12 |
Srping(boot) Filter 설정 방법 (0) | 2023.05.12 |
Spring Post/Get 한글 파라미터 값 깨짐 현상 (0) | 2023.05.02 |
250x250
반응형
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- leatcode
- 알고리즘
- 네이버 클라우드
- MySQL
- 정의
- 캘린더
- 도커
- dfs
- spring
- 격리수준
- Linux
- 개념 이해하기
- 스케줄러
- 리눅스
- 캐시
- centos7
- hazelcast
- dockerfile
- Cache
- mybatis
- Lock
- docker
- insert
- 이미지
- 컨테이너
- Java
- 권한
- LocalDate
- ncp
- Quartz
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함