처음에는 Aspose 라이브러리를 했지만 워터마크가 남아서....
다른 라이브러리를 찾아보니 apache에 pdfbox가 있었다.
문서 : https://pdfbox.apache.org/2.0/migration.html
사용법
gradle
3.0 이상 버전도 존재하지만 예제들이 2.0버전대에 더 많기 때문에 2.0 버전대를 추천한다.
implementation group: 'org.apache.pdfbox', name: 'pdfbox', version: '2.0.24'
간단한 예제
File file = new File("pdf파일 위치");
PDDocument document = PDDocument.load(file);
//PDF 페이지 수
int pageCount = document.getNumberOfPages();
// 페이지 마다 JPG파일로 저장
for (int i = 0; i < pageCount; i++) {
BufferedImage bi = pdfRenderer.renderImageWithDPI(i, 100, ImageType.RGB);
File savefile = new File("저장할jpg파일경로지정");
ImageIO.write(bi, "jpg", savefile);
}
//사용한 PDF 문서 객체 닫기
document.close();
내가 구현 로직
public Response pdfToJpg(MultipartFile multipartFile) throws Exception {
List<Response> responseList = Lists.newArrayList();
// load 하기위해 파일 저장
Response upload = upload(multipartFile, false, AttachFileType.VM, null, null, true);
// 저장한 파일 load
File file = new File("./files/" + upload.getServerFilePath());
PDDocument document = PDDocument.load(file);
int pageCount = document.getNumberOfPages();
for (int i = 0; i < pageCount; i++) {
// PDF 파일 페이지마다 jpg로 변환
PDFRenderer pdfRenderer = new PDFRenderer(document);
BufferedImage imageObj = pdfRenderer.renderImageWithDPI(i, 100, ImageType.RGB);
String fileName = upload.getFilename().split("\\.")[0] + "_" + (i + 1) + "p" + ".jpg";
File outputfile = new File("./files/" + upload.getServerPath() + fileName);
ImageIO.write(imageObj, "jpg", outputfile);
// gcs에 업로드
AttachFile attachFile = saveAttachFile(fileName, outputfile.length());
storageService.uploadGcs(outputfile, Paths.get(attachFile.getServerFilePath()));
responseList.add(AttachFileDtoMapper.INSTANCE.entityToResponse(attachFile));
}
// PDF 파일 저장 및 셋팅
PDPage firstPage = document.getPage(0);
AttachFileDto.ImpositionResponse response = AttachFileDtoMapper.INSTANCE.toImpositionResponse(upload(multipartFile, false, AttachFileType.GCS, null, null, false));
response.setWidth(Math.round((firstPage.getMediaBox().getWidth() / 72) * 25.4f));
response.setHeight(Math.round((firstPage.getMediaBox().getHeight() / 72) * 25.4f));
response.setThumbnailList(responseList);
return response;
}
'몰아 넣기' 카테고리의 다른 글
[리액트]리액트 리덕스 구조 및 사용방법 (0) | 2024.03.11 |
---|---|
[리액트] 앱생성 및 리액트 자주쓰는 패키지 정리.ver1 (0) | 2024.03.11 |
[JAVA] JavaIo OutPutStream에 대해서 (1) | 2024.01.11 |
[JAVA] JavaIO InputStream 에 대해서 (1) | 2024.01.10 |
[Kotlin] 함수 (feat.디폴트 파라미터, 네임드 아규먼트) (0) | 2023.09.03 |