본문 바로가기

프로그래밍/JAVA & SPRING

[LifeSoft] spring 11강 itextpdf를 활용한 pdf 파일 만들기

반응형

5. pdf 생성

 

가. itextpdf 라이브러리

- http://itextpdf.com

- API : http://developers.itextpdf.com/examples-itext5

- 한글 처리를 위해서는 폰트 정보가 필요함

 

1) pom.xml에 아래 코드를 추가한다.
  <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>itextpdf</artifactId>
      <version>5.5.13</version>
  </dependency>
  <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>itext-pdfa</artifactId>
      <version>5.5.13</version>
      <scope>test</scope>
  </dependency>
  <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>itext-xtra</artifactId>
      <version>5.5.13</version>
  </dependency>
  <dependency>
      <groupId>com.itextpdf.tool</groupId>
      <artifactId>xmlworker</artifactId>
      <version>5.5.13</version>
  </dependency>
  <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>itext-asian</artifactId>
      <version>5.2.0</version>
  </dependency>

 

 

pdf 기능을 테스트하기 위해 admin_menu.jsp

2) views/include/admin_menu.jsp 에

 <a href="${path}/pdf/list.do">PDF</a> 추가한다.

 

3) controller.PdfController.java

@Controller
@RequestMapping("/pdf/*")
public class PdfController {
 @Inject
 PdfService pdfService;
 
 @RequestMapping("list.do")
 public ModelAndView list() throws Exception { 
  String result = pdfService.createPdf();
  return new ModelAndView("pdf/result", "message", result);
 }
}

 

4) service.pdf.PdfService.java

public interface PdfService {
 public String createPdf();
}

 

4) service.pdf.PdfServiceImpl.java

@Service
public class PdfServiceImpl implements PdfService {
 
 @Inject
 CartService cartService;
 
 @Override
 public String createPdf() {
  String result = "";
  
  try {
   Document document = new Document();
   PdfWriter writer = PdfWriter.getInstance(document,
     new FileOutputStream("d:/springSample.pdf"));
   document.open();
   BaseFont baseFont = BaseFont.createFont(
     "c:/windows/fonts/malgun.ttf",
     BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
   Font font = new Font(baseFont, 12);
   PdfPTable table = new PdfPTable(4);
   Chunk chunk = new Chunk("장바구니", font);
   Paragraph ph = new Paragraph(chunk);
   ph.setAlignment(Element.ALIGN_CENTER);
   document.add(ph);
   
   document.add(Chunk.NEWLINE);  // Chunk : 큰 떵어리
   document.add(Chunk.NEWLINE);
   
   PdfPCell cell1 = new PdfPCell(new Phrase("상품명", font));  // Phrase: 구, 구문
   cell1.setHorizontalAlignment(Element.ALIGN_CENTER);
   PdfPCell cell2 = new PdfPCell(new Phrase("단가", font)); 
   cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
   PdfPCell cell3 = new PdfPCell(new Phrase("수량", font)); 
   cell3.setHorizontalAlignment(Element.ALIGN_CENTER);
   PdfPCell cell4 = new PdfPCell(new Phrase("금액", font)); 
   cell4.setHorizontalAlignment(Element.ALIGN_CENTER);
   
   table.addCell(cell1);
   table.addCell(cell2);
   table.addCell(cell3);
   table.addCell(cell4);
   
   List<CartDTO> items = cartService.listCart("gksmf");
   for(int i=0; i<items.size(); i++) {
    CartDTO dto = items.get(i);
    PdfPCell cellProductName =
      new PdfPCell(new Phrase(dto.getProduct_name(), font));
    PdfPCell cellPrice =
      new PdfPCell(new Phrase(""+dto.getPrice(), font));
    PdfPCell cellAmount =
      new PdfPCell(new Phrase(""+dto.getAmount(), font));
    PdfPCell cellMoney =
      new PdfPCell(new Phrase(""+dto.getMoney(), font));
    table.addCell(cellProductName);
    table.addCell(cellPrice);
    table.addCell(cellAmount);
    table.addCell(cellMoney);
   }
   document.add(table);
   document.close();
   result = "pdf 파일이 생성되었습니다.";
  } catch (Exception e) {
   e.printStackTrace();
   result = "pdf 파일 생성 실패 ...";
  }
  
  return result;
 }
}

 

일반사용자로 로그인 후 장바구니에 몇 개를 담고서

관리자로 로그인하고 pdf 파일을 생성해 본다.

PdfServiceImpl의 cartService.listCart("gksmf");에서

사용자 아이디를 넣어준다.

 

5) views/pdf/result.jsp

파일이 생성되었는지 메시지만 띄워준다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>main</title>
  <%@ include file="../include/header.jsp" %>
</head>
<body>
  <%@ include file="../include/admin_menu.jsp" %>
  <h2>${message }</h2>
</body>
</html>