최종적으로는 엑셀 데이터를 읽어서 PDF를 만드는 과정까지 하려고 한다.
이 예제는 iText API를 다운받아야 한다.
Build Path 등록
Classpath 클릭 -> Add External JARs 클릭 -> 다운 받은 API등록
public class Project04_A {
public static void main(String[] args) {
// iText API
String[] title=new String[] {"제목","저자","출판사","이미지URL"};
String[][]rows=new String[][] {
{"물리법칙의 이해","리처드 파인먼","해나무","https://bookthumb-prinf.pstatic.net/cover/100/365/10036542.jpg"},
{"Java의 정석","남궁성","도우출판","https://bookthumb-prinf.pstatic.net/cover/100/365/10036542.jpg"},
{"리눅스 프로그래밍","장병모","생능출판","https://bookthumb-prinf.pstatic.net/cover/100/365/10036542.jpg"}
};
// 임시로 PDF를 만들어(가상의 메모리에 올려 write)
Document doc=new Document(PageSize.A4);
try {
PdfWriter.getInstance(doc, new FileOutputStream(new File("book.pdf")));
doc.open();
// 한글 폰트
BaseFont bf=BaseFont.createFont("malgun.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font fontTitle=new Font(bf,12);
Font fontRows=new Font(bf,10);
PdfPTable table=new PdfPTable(title.length);
table.setWidthPercentage(100);
float[] colwidth=new float[] {20f, 15f, 15f, 30f};
table.setWidths(colwidth);
for(String header:title) {
PdfPCell cell=new PdfPCell();
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setPadding(10);
cell.setGrayFill(0.9f);
// 문단
cell.setPhrase(new Phrase(header, fontTitle));
table.addCell(cell);
}
table.completeRow();
for(String[]row:rows) {
for(String data:row) {
Phrase phrase=new Phrase(data,fontRows);
PdfPCell cell=new PdfPCell(phrase);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setPaddingTop(20);
cell.setPaddingRight(30);
cell.setPaddingBottom(20);
cell.setPaddingLeft(30);
table.addCell(cell);
}
table.completeRow();
}
PdfPCell cell4=new PdfPCell(new Phrase("cell 5"));
cell4.setColspan(2);
PdfPCell cell5=new PdfPCell(new Phrase("cell 6"));
cell5.setColspan(2);
table.addCell(cell4);
table.addCell(cell5);
doc.addTitle("PDF Table Demo");
doc.add(table);
System.out.println("table 생성 완료");
} catch (Exception e) {
e.printStackTrace();
} finally {
doc.close();
}
}
}
가상으로 메모리에 PDF 형식으로 만들기 위해 Document(itext API를 꼭 선택해야) 객체 생성(PageSize.A4)
말 그대로 A4 사이즈
PdfWriter.getInstance(new FileOutputStream("생성할 파일이름.pdf"));
한글 폰트가 깨지는 부분을 막기 위해서
C 드라이브의 Windows -> Fonts 폴더에 들어가서 한글 형식의 .ttf 파일을 해당 프로젝트에 붙여넣기한다.
BaseFont 객체 -> 생성자로 한글 폰트를 넘겨준다.
Font 객체 -> 폰트 크기
PdfPTable -> 엑셀 테이블처럼 테이블 생성
table.setWidthPercentage(100); 테이블의 너비 퍼센트로
float[] colwidth -> 각 셀마다 너비 조정
table.setWidths(colwidth); -> 너비 조정
첫번째 for문 : title 배열을 넘겨 셀을 생성하고 중앙 정렬, 패딩, 색깔(회색)을 지정하고
cell.setPhrase(new Phrase(header, fontTitle)));
셀에 문단 생성 -> 하나씩 넘어오는 header와, fontTitle(글자 크기)를 Phrase 생성자로 지정한 후
table.addCell(cell); -> 테이블에 cell을 넣는다.
table.completeRow(); -> 한 행이 완성이 되면 써주어야 한다.
나머지 데이터도 이 방법으로 똑같이 하면 된다.
PdfPcell cell4=new PdfCell(new Phrase("cell 5"));
cell4.setColspan(2);
이 부분은 html을 생각하면 쉽다. 테이블의 행을 두개 합친다는 뜻.
마지막으로
doc.addTitle
doc.add(table) -> 테이블이 생성 완료 되고
doc.close(); -> 꼭 닫아줘야 한다.
'자바TPC 프로젝트' 카테고리의 다른 글
P5. Socket(소켓)이 만들어지는 과정(TCP 3-way Handshake) (0) | 2022.02.07 |
---|---|
P4. iText API를 이용한 PDF table 만들기(2) (0) | 2022.02.07 |
P3. Excel에 cell의 DataType 알아보기(3) (0) | 2022.02.06 |
P3 Excel에 이미지 저장하기(2) (0) | 2022.02.06 |
P3 Excel파일 Reading하기 (1) ClassNotFoundException: org.apache.xmlbeans.XmlObject 에러해결 (0) | 2022.02.06 |