진이의 Developer Story
Apache PDFBOX (pdf to image) 본문
파일업로드를 할때 PDF를 업로드할 경우, 이미지 형식으로 변환하여 올려달라는 요청을 받았습니다. (PDF뷰어가 설치되지 않은 PC도 있기 때문에 몇몇 이용자는 볼 수 없다는 이유였습니다.)
그런고로 PDF 파일 형식을 이미지로 바꾸는 작업을 하게 되었습니다.
생각보다는 간단하네요.
일반적으로 변환을 하게 되면 페이지 당 1개의 이미지 파일이 생성됩니다.
저는 하나의 이미지에 합쳐서 출력했습니다.
MultipartFile file; // 스프링 MultipartFile
/*
* 파일이 PDF라면 이미지로 변환
*/
if ("application/pdf".equals(file.getContentType())) { // 파일타입이 pdf형식 일 경우,
PDDocument document = PDDocument.load(file.getInputStream()); // document 생성
List<PDPage> pdPages = document.getDocumentCatalog().getAllPages(); // 모든 페이지를 가져와서 List에 담습니다.
List<BufferedImage> bufferedImages = new ArrayList<BufferedImage>(); // 변환될 이미지 객체를 담을 List 선언
int width = 0, height = 0; // 병합될 이미지 파일의 너비와 높이 값을 담을 변수
for (PDPage pdPage : pdPages) { // 한 페이지씩 꺼내와서
BufferedImage bim = pdPage.convertToImage(BufferedImage.TYPE_INT_RGB, 300); // 이미지로 변환
bufferedImages.add(bim); // 그리고 이미지 List에 담습니다.
if (bim.getWidth() > width) width = bim.getWidth(); // 병합될 이미지의 최대 너비를 구합니다.
height += bim.getHeight(); // 병합될 이미지의 최대 높이를 구합니다.
}
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 병합될 이미지 객체 생성
Graphics2D graphics = (Graphics2D) bufferedImage.getGraphics(); // 그래픽 객체를 생성하고,
graphics.setBackground(Color.WHITE); // 배경을 흰색으로 지정합니다.
int idx = 0; // 이 부분부터 이미지를 하나로 병합하는 과정입니다.
for (BufferedImage obj : bufferedImages) { // 이미지 List에서 이미지를 하나씩 꺼내와서
if (idx == 0) height = 0; // 첫 번째 이미지의 경우 높이를 0으로 설정합니다.
graphics.drawImage(obj, 0, height, null); // 그래픽 객체에 꺼내온 이미지를 그려줍니다.
height += obj.getHeight(); // 높이값을 이미지의 높이만큼 더합니다.
idx++;
}
fileExt = "jpg"; // 파일 형식은 jpg (png나 bmp 같은 다른 포맷도 됩니다)
ImageIO.write(bufferedImage, fileExt, new File(filePath)); // 마지막으로 병합된 이미지를 생성합니다.
graphics.dispose(); // 그래픽 리소스 해제
} else {
pdf가 아닐 경우의 처리...
}
생각보다 간단하네요~^^
'Java > Spring' 카테고리의 다른 글
Spring JavaMailSender 를 이용하여 메일보내기 (0) | 2016.11.17 |
---|---|
Spring MVC를 활용한 스마트에디터 2.0 이미지 업로드 (6) | 2016.11.14 |
(6) Spring+MyBatis 게시판 만들기 - 수정 및 삭제 추가 (12) | 2016.10.19 |
HTML TO EXCEL, PDF (0) | 2016.09.29 |
(5) Spring+MyBatis 게시판 만들기 - 파일 업로드 [작성중] (3) | 2016.08.02 |
Comments