apache pdfbox lib 사용 정리

김명래·2022년 11월 23일
0

먼저 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();
profile
독자보다 필자를 위해 포스팅합니다

0개의 댓글