JSP

- itext 라이브러리 사용

- http://itextpdf.com

- 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("/");

 

 

출려값

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

입으로 읽지 말고 뜻으로 읽으며, 뜻으로 읽지 말고 몸으로 읽자. -불경

댓글 ( 4)

댓글 남기기

작성

JSP 목록    more