S3 trigger와 lambda를 이용한 pdf 변환

TaeYoon Kim·2024년 3월 10일
0

기초 (치트 시트)

목록 보기
22/23
  1. 파일저장
  2. 파일 변환
  3. Aws lamda에 함수 등록하는 방법
  4. S3 trigger로 Aws lamda에 등록된 함수 실행하기

pdf 기본 지식


pdf 파일로 변환하는 라이브러리

  • IText
  • Apache POI

등등

일반적인 문서 변환과정
1. 문서 파일 분석
2. PDF 문서 구조 생성
3. 레이아웃 및 서식 적용

pdf파일을 다루는데 파일의 글자 내용만 옮겨서야 사용자가 작성한 문서 내용 그대로를 pdf파일로 만들 수 없다.

텍스트 ,폰트 ,텍스트의 정렬, 여백 ,줄 간격 ,특수 문자 ,이미지 등등의
레이아웃이나 서식에 관한 데이터도 필요하다.

이 때, 한글 문서, ms office, 사진, 메모장 등등 편집지마다
레이아웃,서식에 관한 데이터를 저장하는 방식이 다르다.

차이점

IText는 문서파일의 텍스트 블록들을 저장하기 위해,
모든 데이터를 byte 단위로 가져와서 저장한다.

Apache POI는 문서파일 변환기능을 제공하기 때문에 과정이 간편하다.
단, ms office 파일만을 지원한다.

ms office file만 취급한다면 Apache POI를 사용하는 것이 좋다.

IText 사용 예시

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.S3Object;
import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.PdfWriter;

public class S3ToPdfHandler implements RequestHandler<S3Event, String> {

    @Override
    public String handleRequest(S3Event event, Context context) throws Exception {
        // S3 이벤트 정보 추출
        String bucketName = event.getRecords().get(0).getS3().getBucket().getName();
        String objectName = event.getRecords().get(0).getS3().getObject().getKey();

        // S3 클라이언트 생성
        AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();

        // 문서 파일 다운로드
        GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
        S3Object object = s3Client.getObject(request);

        // PDF 변환
        Document document = new Document();
        PdfWriter writer = new PdfWriter(document);
        document.open();

        // 문서 내용 추출 및 PDF 생성
        byte[] bytes = object.getObjectContent().readAllBytes();
        String text = new String(bytes);
        Paragraph paragraph = new Paragraph(text);
        document.add(paragraph);

        document.close();
        writer.close();

        // S3에 PDF 파일 업로드
        s3Client.putObject(bucketName, objectName + ".pdf", document.toByteArray());

        return "success";
    }
}


Apache POI 예시

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.converter.pdf.PdfConverter;
import org.apache.poi.xwpf.converter.pdf.PdfOptions;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class WordToPdf {

    public static void main(String[] args) throws IOException {
        // 변환할 Word 문서 경로
        String docPath = "/path/to/document.docx";

        // 변환된 PDF 파일 경로
        String pdfPath = "/path/to/output.pdf";

        // Word 문서 열기
        XWPFDocument document = new XWPFDocument(new File(docPath));

        // PDF 변환 옵션 설정
        PdfOptions options = PdfOptions.create();

        // PDF 파일 생성
        FileOutputStream out = new FileOutputStream(new File(pdfPath));
        PdfConverter.getInstance().convert(document, out, options);

        // 닫기
        out.close();
        document.close();
    }
}

Aws Lambda에 함수 등록하는 방법

  1. 정책 정의 (권한)
  2. 역할 정의 및 정책 부여
  3. 함수 만들고 역할 부여
  4. 함수 배포

https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/with-s3-example.html


IText, Apache POI의 외부 라이브러리 사용방법?
만약 구현하다가 라이브러리가 사용되지 않을 경우 알아보자.

IText

iText 소개
iText는 Java 및 .NET 플랫폼에서 PDF 문서를 생성, 변환, 조작하는 데 사용할 수 있는 오픈 소스 라이브러리입니다.

iText의 주요 기능:

PDF 생성: 텍스트, 이미지, 표 등을 포함한 PDF 문서를 생성합니다.
PDF 변환: PDF 문서를 다른 형식으로 변환합니다. (예: HTML, Word, 이미지)
PDF 조작: PDF 문서의 내용, 폰트, 이미지, 메타데이터 등을 조작합니다.
PDF 서명: PDF 문서에 서명을 추가합니다.
PDF 암호화: PDF 문서를 암호화합니다.

iText 활용 분야:

문서 생성: 보고서, 제안서, 계약서 등의 문서를 PDF로 생성합니다.
데이터 추출: PDF 문서에서 텍스트, 이미지, 표 등의 데이터를 추출합니다.
양식 처리: PDF 양식을 자동으로 처리합니다.
문서 워크플로 자동화: PDF 문서 관련 작업을 자동화합니다.
iText의 장점:

오픈 소스: 무료로 사용할 수 있습니다.
강력한 기능: 다양한 PDF 기능을 제공합니다.
사용 편의성: 사용하기 쉽습니다.
활발한 커뮤니티: 활발한 커뮤니티 지원을 받습니다.
iText 버전:

iText 7: 최신 버전이며, Java 8 이상에서 사용할 수 있습니다.
iText 5: 이전 버전이며, Java 6 이상에서 사용할 수 있습니다.
추가 정보:

iText 공식 웹사이트: https://itextpdf.com/

Apache POI

Apache POI 소개
Apache POI는 Java 플랫폼에서 Microsoft Office 문서를 생성, 읽기, 쓰기, 변환하는 데 사용할 수 있는 오픈 소스 라이브러리입니다.

Apache POI의 주요 기능:

Excel: Excel 문서(.xls, .xlsx) 생성, 읽기, 쓰기, 변환
Word: Word 문서(.doc, .docx) 생성, 읽기, 쓰기, 변환
PowerPoint: PowerPoint 문서(.ppt, .pptx) 생성, 읽기, 쓰기, 변환
PDF: PDF 문서 읽기, 쓰기 (Apache PDFBox 라이브러리 필요)
Apache POI 활용 분야:

데이터 처리: Excel 문서를 사용하여 데이터를 저장, 분석, 처리합니다.
보고서 생성: Excel 또는 Word 문서를 사용하여 보고서를 생성합니다.
양식 처리: Excel 또는 Word 양식을 자동으로 처리합니다.
문서 워크플로 자동화: Microsoft Office 문서 관련 작업을 자동화합니다.
Apache POI의 장점:

오픈 소스: 무료로 사용할 수 있습니다.
강력한 기능: 다양한 Microsoft Office 기능을 제공합니다.
사용 편의성: 사용하기 쉽습니다.
활발한 커뮤니티: 활발한 커뮤니티 지원을 받습니다.
Apache POI 버전:

POI 5.0: 최신 버전이며, Java 8 이상에서 사용할 수 있습니다.
POI 4.2: 이전 버전이며, Java 6 이상에서 사용할 수 있습니다.
추가 정보:

Apache POI 공식 웹사이트: https://poi.apache.org/

0개의 댓글