HTML(JSP)를 PDF로 변환 해봅시다.
iText, iReport ... 에휴.. 정말 많기는 하죠...
JSP를 만들고 그냥 바로 PDF로 변환하는 방법이 있다면...
그래서~~ wkhtmltopdf(GNU라이센스)을 이용해서 만들었습니다.
우선 개념은
1. 출력할 HTML(JSP)를 만들고
2. wkhtmltopdf를 이용해서 로컬에 PDF를 만들고
3. 그 PDF문서를 다운받게 해준다.
맘에 안드시는 분은 뒤로~ 클릭하시고요...
쉬우니까 걍 쓰시겠다는분은 이제 계속보세요.
1. 출력할 HTML(JSP)를 만듭니다. (생략ㅋㅋ)
2. wkhtmltopdf를 다운 받습니다.
home: http://code.google.com/p/wkhtmltopdf/
download: http://code.google.com/p/wkhtmltopdf/downloads/list
각 OS에 맞는 버젼을 설치 하세요.
윈도우는 wkhtmltopdf-0.9.0_beta3 Windows Static Binary 를 사용하셔도 됩니다.(deprecate 된버전이긴합니다만;;)
3. 다음 2개의 자바파일을 적절히 사용해서 변환하세요.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Test {
public boolean runCmd(String strCmd) {
boolean returnVal = false;
Runtime run = Runtime.getRuntime();
Process p = null;
try {
p = run.exec(strCmd);
StreamPrintThread errprint = new StreamPrintThread(p.getErrorStream());
StreamPrintThread okprint = new StreamPrintThread(p.getInputStream());
p.getOutputStream().close();
errprint.start();
okprint.start();
int rst = p.waitFor();
if ( 0 == rst) {
System.out.println("RunProgram success : " + strCmd);
returnVal = true;
}else {
System.out.println("RunProgram fail (rst:"+ rst +") : " + strCmd);
returnVal = false;
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != p) p.destroy();
}
return returnVal;
}
}
class StreamPrintThread extends Thread {
BufferedReader br = null;
private StreamPrintThread() {}
public StreamPrintThread(InputStream is) {
br = new BufferedReader(new InputStreamReader(is));
}
void close() {
try {
if(br != null) br.close();
}catch(Exception e) {
e.printStackTrace();
System.out.println(e);
}
}
public void run() {
try {
String line = null;
while((line = br.readLine()) != null) {
System.out.println(line);
}
}catch(Exception e) {
e.printStackTrace();
System.out.println(e);
}finally {
close();
}
}
}
public class Test2 {
public static void main(String[] args) {
String strHtml = "\"http://www.naver.com\"";
String strPdf = "D:\\pdf\\test.pdf";
String strCmd = "D:\\pdf\\wkhtmltopdf-0.8.3.exe";
strCmd += " " + strHtml;
strCmd += " " + strPdf;
Test t = new Test();
System.out.println( t.runCmd(strCmd) );
}
}
Test2에서 리턴되는 값이 True/False입니다.
True일때 스트림을 열어서 다운로드 시키면 되겠네요 ㅎㅎ
아름답거나 정통 방법은 아니지만 쉬운방법이지요
급할땐 이걸로 쓰세요~~
아래는 명령어 도움말입니다.
- write by 꼬마갱이 2010.06.18 -
원숭이가 질문을 했더군요
http://code.google.com/p/wkhtmltopdf/issues/detail?id=227&q=encoding
대충 내용은 EUC-JP가 나오게 해달라고요;;
클릭했다가 스모하는 사진이랑 왕창깨진 원숭이말을 볼수있었어요(PDF)
혹시 PDF에 한글이 깨지시는 분들
원숭이처럼 거기에 질문하지 마시고요.
꼬마갱이가 대신 삽질해봤습니다.
우선 JSP를 UTF-8로 만드세요.
<%@ page contentType="text/html;charset=utf-8" %>
반드시 파일인코딩도 utf-8로 맞추세요(멜폼드익셉숀이 일어날수있습니다.ㅋ 발음조타)
그러면 끝~~~
'JSP야' 카테고리의 다른 글
request (0) | 2009.12.23 |
---|---|
User-Agent - 브라우져 알아내기 (0) | 2009.12.23 |
java.util.Date (0) | 2009.12.07 |
sendRedirect (0) | 2009.12.07 |
Parameter알아보기 (0) | 2009.12.07 |