ppt to image/pdf 변환

2014. 8. 10. 01:51 Spring/Java

ppt 파일을 pdf로 변환하기 위해서는-
image로 변환 후, image를 pdf로 다시 변환시켜야 한다-

1.먼저 poi-scratchpad와 itextpdf가 필요하다-
다음을 pom.xml에 추가해 준다-
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<!-- ppt -->
<dependency>
	<groupid>org.apache.poi</groupid>
	<artifactid>poi-scratchpad</artifactid>
	<version>3.10-FINAL</version>
</dependency>

<!-- iText pdf -->
<dependency>
	<groupid>com.itextpdf</groupid>
	<artifactid>itextpdf</artifactid>
	<version>5.5.2</version>
</dependency>


2. PPTtoPDFConverter.java
저장되어 있는 ppt 파일의 경로를 입력하면-
pdf 파일로 변환 후, pdf파일의 경로를 출력한다-
 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;

import javax.imageio.ImageIO;

import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.usermodel.SlideShow;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfWriter;

public class PPTtoPDFConverter {
	String realFolder = FileManager.realFolder;
	private String pdfFileName;
	
	public PPTtoPDFConverter(){
	}
	
	public PPTtoPDFConverter(String fileName){
		try {
			setPdfFileName(this.convert(fileName));
		} catch (IOException | DocumentException e) {
			e.printStackTrace();
		}
	}
	
	private void setPdfFileName(String pdfFileName) {
		this.pdfFileName = pdfFileName;		
	}
	
	public String getPdfFileName() {
		return pdfFileName;
	}

	private String convert(String fileName) throws IOException, DocumentException{
		//1.Read PPT file
		FileInputStream fis = new FileInputStream(realFolder + fileName);
		SlideShow ppt = new SlideShow(fis);
		
		fis.close();
		
		//2.Draw Image
		Dimension pageSize = ppt.getPageSize();
		Slide[] slide = ppt.getSlides();

		for(int i=0; i<slide.length; i++){
			BufferedImage image = new BufferedImage(pageSize.width, pageSize.height, BufferedImage.TYPE_INT_RGB);
			
			Graphics2D graphics = image.createGraphics();
			graphics.setPaint(Color.white); //이미지 영역을 클리어
			graphics.fill(new Rectangle2D.Float(0, 0, pageSize.width, pageSize.height));
			
			slide[i].draw(graphics);
			
			File dir = new File(realFolder + "tempImg/");
		    if (!dir.isDirectory()) {
		      dir.mkdirs();
		    }
		    
		    FileOutputStream fos = new FileOutputStream(dir + "temp" + (i+1) + ".png");
		    ImageIO.write(image, "png", fos);
		}
		
		//3.Image To PDF
		Document document = new Document();
		File dir = new File(realFolder + "portfolioPDF/");
		if (!dir.isDirectory()) {
			dir.mkdirs();
		}
	    
		String pdfFileName = "portfolioPDF/" + UUID.randomUUID().toString();
		PdfWriter.getInstance(document, new FileOutputStream(realFolder + pdfFileName));
		document.open();
		
		for(int i=1; i&lt;=slide.length; i++){
			String imagePath = realFolder + "tempImg/temp" + i + ".png";
			Image image = Image.getInstance(imagePath);
			document.add(image);
			
			//4.Delete Image
		    File file = new File(imagePath);
		    file.delete();
		}
		
		document.close();
		
		return pdfFileName;
	}	
}

'Spring/Java' 카테고리의 다른 글

BLOB으로 저장 된 이미지 출력  (0) 2014.08.13
Excel Insert, poi  (0) 2014.08.12
AOP 사용, 어노테이션  (0) 2014.08.10
간단한 암호화, MD5, SHA1  (0) 2014.08.10
MyBatis 연결 설정  (0) 2014.08.09

Recent Posts

Recent Comments

Recent Trackbacks