[SPRING/JAVA] Apache Pdfbox를 이용한 PDF 수정3 - 글자 및 이미지 삽입
본문 바로가기

Web 개발/Java, SpringBoot, JPA

[SPRING/JAVA] Apache Pdfbox를 이용한 PDF 수정3 - 글자 및 이미지 삽입

728x90
반응형
PDF 파일 생성 및 저장 관련 기능은 1편 참고


PDF 수정1 - 파일 생성 및 저장

https://kimji0139.tistory.com/85

PDF 수정2 - 양식 필드
https://kimji0139.tistory.com/88

 

 

1. 글자 삽입 방법1

PDTextField textField = (PDTextField) field;
// Helv는 영어만 지원
String font = "/Helv "+ fontsize + " Tf 0 0 1 rg";
textField.setDefaultAppearance(font);
textField.setValue(text);

 

 

 

2. 글자 삽입 방법2

resources/resources/fonts 경로 내에 폰트가 있어야 함

네이버 나눔고딕폰트를 사용하였음

PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.PREPEND, true, true);
contentStream.beginText();
PDFont font = PDType0Font.load(document, new ClassPathResource("resources/fonts/NanumGothic.ttf").getFile());
contentStream.setFont(font, fontsize);
contentStream.newLineAtOffset(x, y);
contentStream.showText(text);
contentStream.endText();
contentStream.close();

 

 

 

3. 이미지 삽입

PDPageContentStream contentStream = new PDPageContentStream(this.document, page, PDPageContentStream.AppendMode.PREPEND, true, true);
contentStream.drawImage(imageXObject, x, y, imgW, imgH);
contentStream.close();

 

 

 

이때 이미지는 PDImageXObject 타입을 사용하기 때문에 이미지 타입을 형변환 해야한다.

 

4. Base64 이미지 PDImageXObject 타입으로 변경

byte[] base64ToBytes = Base64Utils.decodeBase64ToBytes(base64);
return PDImageXObject.createFromByteArray(document, base64ToBytes, name);

 

public class Base64Utils {

    public Base64Utils() {
    }

    public static byte[] decodeBase64ToBytes(String imageString) {
        if (imageString.startsWith("data:image/png;base64,")) {
            return Base64.getDecoder().decode(imageString.substring("data:image/png;base64,".length()));
        } else {
            throw new IllegalStateException("it is not base 64 string");
        }
    }
}

 

728x90
반응형