Web 개발/Java, SpringBoot, JPA
[SPRING/JAVA] Apache Pdfbox를 이용한 PDF 수정3 - 글자 및 이미지 삽입
닉ㄴ네
2022. 4. 6. 09:58
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
반응형