- itext 라이브러리 사용
- API : http://developers.itextpdf.com/examples-itext5
- 한글 처리를 위해서는 폰트 정보가 필요함
* pom.xml 에 라이브러리 추가
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-pdfa -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-pdfa</artifactId>
<version>5.5.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-xtra -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-xtra</artifactId>
<version>5.5.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf.tool/xmlworker -->
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
윈도우 폰트
c:/windows/fonts/HANBatang.ttf
저장된 폰트 사용
무료 폰트 사이트
한글 폰트 가 없으면 안 된다. (반드시 필요)
무료 한글 폰트
http://www.tryneat.net/category
https://brunch.co.kr/@jade/203
패키지 설정 주의 - import com.itextpdf.text.Document;
@Controller
@RequestMapping(value="/pdf")
public class PdfController {
@Inject
BoardService boardService;
@RequestMapping(value="/pdf_save.do")
public String pdfSave(HttpServletRequest request, Model rttr) {
try{
// 패키지 설정 주의 - import com.itextpdf.text.Document;
//pdf document 객체 만들기
Document document=new Document();
//pdfWriter 객체 만들기
//PdfWriter.getInstance(도큐먼트 객체, OutputStream(pdf 파일 경로))
PdfWriter writer =PdfWriter.getInstance(document, new FileOutputStream("C:\\Users\\cyj\\Desktop\\fileup-master\\sample2.pdf"));
//pdf docuemnt 열기
document.open();
//한글 처리를 위해 폰트 설정
//무료 포튼 다운로드 http://www.tryneat.net/
String path =request.getSession().getServletContext().getRealPath("/");
BaseFont baseFont=
BaseFont.createFont(path +"/resources/template/font/HoonJunglebook.ttf".replace('/', File.separatorChar), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
// com.itextpdf.text.Font; 패키지
Font font =new Font(baseFont, 12); // 폰트 , 폰트 사이즈
//테이블 객체
PdfPTable table =new PdfPTable(4);// 4 column
Chunk chunk =new Chunk("자유 게시판", font); //출력할 내용 긴내용도 들어간다.
Paragraph ph =new Paragraph(chunk);
ph.setAlignment(Element.ALIGN_CENTER);//가운데 정렬
//pdf 문서에 내용 추가
document.add(ph);
//줄바꿈
document.add(Chunk.NEWLINE);
document.add(Chunk.NEWLINE);
//표의 타이틀 행 출력
PdfPCell cell1=new PdfPCell(new Phrase("번호", font));
cell1.setHorizontalAlignment(Element.ALIGN_LEFT);
table.addCell(cell1);
PdfPCell cell2=new PdfPCell(new Phrase("이름", font));
cell1.setHorizontalAlignment(Element.ALIGN_LEFT);
table.addCell(cell2);
PdfPCell cell3=new PdfPCell(new Phrase("제목", font));
cell1.setHorizontalAlignment(Element.ALIGN_LEFT);
table.addCell(cell3);
PdfPCell cell4=new PdfPCell(new Phrase("날짜", font));
cell1.setHorizontalAlignment(Element.ALIGN_LEFT);
table.addCell(cell4);
Criteria cri =new Criteria();
cri.setPage(1);
cri.setPerPageNum(10);
List<BoardDTO> items =boardService.listCriteria(cri);
for(int i=1; i<items.size(); i++){
BoardDTO dto =items.get(i); // i번째 레코드 dto 에 저장
table.addCell("" + dto.getIdx()); // 테이블에 셀을 추가
//addCell 이 String 밖에 안된다
//Phrase 에서 font 를 넣지 않으면 한글이 깨진다.
PdfPCell cellName=new PdfPCell(new Phrase(dto.getUsername(), font));
table.addCell(cellName);
PdfPCell cellsubject=new PdfPCell(new Phrase(dto.getSubject(), font));
table.addCell(cellsubject);
table.addCell("" + dto.getPost_date());
}
document.add(table);
//pdf 문서 닫기(지금까지 작업한 내용들이 저장됨)
document.close();
}catch(Exception e){
rttr.addAttribute("message", e.getMessage());
}
return "/pdf/result";
}
}
String root_path =request.getSession().getServletContext().getRealPath("/");
출려값
댓글 ( 4)
댓글 남기기