SDK에 포함된 안드로이드 OS 예뮬레이터 덕분에 구글의 차세대 모바일 폰 플랫폼을 둘러볼수가 있게 되였습니다.^^ 실제 공개된 UI를 보시면서 안드로이드 OS를 느껴보시죠.
SDK에 포함된 안드로이드 OS 예뮬레이터 덕분에 구글의 차세대 모바일 폰 플랫폼을 둘러볼수가 있게 되였습니다.^^ 실제 공개된 UI를 보시면서 안드로이드 OS를 느껴보시죠.
1. iText를 시작하면서...
프로젝트를 진행하면서 출력 결과물을 PDF로 작성해야할 필요성으로 하여 PDF 레포트를 생성시켜주는 자바 라이브러리인 - iText를 사용하였습니다. 실제 iText를 이용하면 서버사이드에서 Jsp나 JavaBean을 이용하여 여러가지 형식의 PDF 레포트를 만드실수가 있습니다.
2. iText에 대한 간단한 소개
iText 유명한 오픈소스 배포사이트인 sourceforge에서 진행하고 있는 프로젝트중의 하나로써, PDF 문서를 만들어주는 Java 라이브러리입니다. iText를 이용하여 PDF 문서는 물론 RTF 문서도 만드실수가 있습니다. 또한 XML, HTML 문서도 PDF문서로 컨버팅 하실수도 있습니다.
3. iText를 이용하여 생성된 나의 첫 PDF 문서
iText를 이용하여 PDF 문서를 생성하는데는 모두 5가지 절차가 필요합니다.
① com.lowagie.text.Document 클래스 인스턴스를 생성합니다.
현재 http://code.google.com/android/ 에서 안드로이드의 자료를 얻을 수 있으며,
Android Developer Challenge 라는 무려 천만 달러가 걸린 어플리케이션 컨퍼런스가 열렸습니다. 컨퍼런스 자료는 여기서 얻으실수 있습니다. http://code.google.com/android/adc.html
소스열기
HtmlWriter나 RtfWriter2 를 이용하지 않고 테이블을 만들고 렌더링할려면 iText의 PdfPTable을 사용하는 것이 가장 무난하다.
아래에 그럼 가장 간단한 예로부터 차츰차츰 PdfPTable에 대하여 알아보도록 하자.
가령 아래 그림에서와 같은 Table을 만들려면 어떻게 코드가 구성되여야 할가?
소스열기
tableLayour 메소드 하나만 달랑 있다. 사실상 이메소드는 테이블 렌더링이 끝나고 나서 호출이 되여진다. 실제 이 메소드를 통하여 추가한 텍스트와 그래프들은 테이블 렌더링이 끝난후 canvases 를 포함하고 있는 PdfContentByte속에 저장이 되여진다.
그럼 실제 PdfPTableEvent 인터페이스를 구현하여 테이블에 여러가지 모양을 내보자.
테이블 외곽에 두께가 1.5인 테두리를 넣어주는 것을 예로 들겠다.
먼저 PdfPTableEvents 라는 클래스를 하나 만들어보자.
소스열기
이러고 나면 실제 두께가 1.5인 테두리가 그려진 테이블을 볼수가 있다.
소스열기
/**
* @param borderIdx the borderIdx to set
*/
public void setStrokedBorderIdx(int[] strokedBorderIdx)
{
this.strokedBorderIdx = strokedBorderIdx;
}
/* (non-Javadoc)
* @see com.lowagie.text.pdf.PdfPTableEvent#tableLayout(com.lowagie.text.pdf.PdfPTable, float[][], float[], int, int, com.lowagie.text.pdf.PdfContentByte[])
*/
public void tableLayout(PdfPTable table, float[][] widths, float[] heights,
int headerRows, int rowStart, PdfContentByte[] canvases)
{
float width[] = widths[0];
float x = width[0]; // x축 좌표
float y = heights[heights.length - 1]; // y축 좌표
float w = width[width.length - 1] - width[0]; // 테이블 넓이
float h = heights[0] - heights[heights.length - 1]; // 테이블 높이
PdfContentByte cb = canvases[PdfPTable.TEXTCANVAS];
cb.saveState();
cb.setLineWidth(1.4f);
cb.setRGBColorStroke(0, 0, 0);
cb.rectangle(x, y, w, h);
cb.stroke();
if ( strokedBorderIdx != null )
{
for ( int i = 0; i < strokedBorderIdx.length; i ++ )
{
float [] bp = getBorderPosition( widths, heights, strokedBorderIdx[i] );
cb.rectangle(bp[0], bp[1], bp[2], bp[3]);
cb.stroke();
}
}
}
/**
* @param widths
* @param heights
* @param index
* @return
* 굵기를 설정 할 Rectangle의 좌표 및 사이즈를 얻어온다.
*/
private float [] getBorderPosition( float[][] widths, float[] heights, int index )
{
float [] borderPosition = new float[4];
float width[] = widths[0];
float x = width[0];
float y = heights[heights.length - 1];
float w = width[width.length - 1] - width[0];
float h = heights[index] - heights[heights.length - 1];
borderPosition[0] = x; borderPosition[1] = y;
borderPosition[2] = w; borderPosition[3] = h;
return borderPosition;
}
}
실제 Spring MVC를 이용하지 않고 iText만 이용하여 고품질의 PDF문서를 생성할 수 있다.
하지만 이미 프로젝트내에 Spring MVC를 도입하여 사용을 하고 있는 상황이라면 별도로 MVC를 구성하는것 보다는 아예 Spring MVC를 이용하는것이 편하다.
Spring MVC와 iText를 연동하는데 아래와 같이 4가지 단계가 필요하다.
web.xml에서 아래와 같이 pdf용 서블릿을 선언하고 서블릿 맵핑을 한다.
[code xml] <!-- PDF Servlet Definition -->
<servlet>
<servlet-name>config/pdf</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Servlet Mapping For PDF DispatcherServlet -->
<servlet-mapping>
<servlet-name>config/pdf</servlet-name>
<url-pattern>*.pdf</url-pattern>
</servlet-mapping>[/code] 서블릿 명을 config/pdf로 설정하였으므로 우리가 만들어야 할 pdf 서블릿 설정 파일명은 pdf-servlet.xml이 되겠다.