먼저 jar 를 다운받아오거나 maven에 추가해준다.
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.8</version>
</dependency>
JDK 1.8 version 에서 구동되기때문에 error 발생시 JDK Version 을 확인해보자.
먼저 pdf 문서를 사용하기위해 객체를 생성해준다.
PDDocument doc = new PDDocument();
font 를 설정하기위해서는 FileInpuStream객체를 이용하여 해당 font file을 불러온 뒤
불러온 stream을 PDType0Font.load 메소드에 pdf 객체와 stream 같이 전달하여 PDType0Font 객체를 생성해준다.
PDType0Font fontBestFriend = PDType0Font.load(doc, fontStream);
page 를 생성하기위해서는 PDPage 객체를 생성하고 생성한 객체를 PDDocument 클래스의 addPage 메서드에 전달하여 생성한다.
PDPage blankPage = new PDPage(PDRectangle.A4);
doc.addPage(blankPage);
이후 pdf file을 편집하기위해 PDPageContentStream 객체를 생성해준다.
객체 생성시에는 PDDocument 객체와 page 에대한 정보를 보내주어야한다.
PDPageContentStream pcs = new PDPageContentStream(doc, doc.getPage(0), PDPageContentStream.AppendMode.APPEND, false);
생성된 PDPageContentStream 을 이용하여 선 긋기나 글 쓰기 이미지 삽입등이 가능하다.
// 가운데 줄 긋기(X좌표, Y좌표)
pcs.moveTo(PDRectangle.A4.getWidth()/2, PDRectangle.A4.getHeight());
pcs.lineTo(PDRectangle.A4.getWidth()/2, 0);
pcs.stroke();
//PDF에 삽입할 이미지를 가져온다. 인자값 - 이미지경로, PDF 페이지
pdImage = PDImageXObject.createFromFile(logoFile.toString(), doc);
//좌표 설정
int pageWidthPosition = Math.round(blankPage.getCropBox().getWidth() * 0.03f);
int pageHeightPosition = Math.round(blankPage.getCropBox().getHeight() * 0.96f);
pcs.drawImage(pdImage, pageWidthPosition, pageHeightPosition, 120, 20);
//글쓰기 시작
pcs.beginText();
//폰트 셋팅
pcs.setFont(fontBestFriend,12);
pcs.newLineAtOffset(PDRectangle.A4.getWidth()-100, 15f);
pcs.showText("하이요 ~~~");
pcs.endText();
pcs와 doc 자원회수시에는 pcs 를 선행적으로 닫아주고 doc를 닫는다.
pcs.close();
doc.save(pdfFile);
doc.close();