처음에는 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;
}

 

 

복사했습니다!