[java] Java Apache FOP와 문서 서명

Apache FOP는 XML 기반의 포맷을 PDF, PNG, TIFF 등의 다양한 형식으로 변환해주는 Java 기반의 오픈 소스 라이브러리입니다. 문서를 생성하고 포맷하는 강력한 기능을 제공하여 다양한 용도로 사용됩니다. 이번 글에서는 Java Apache FOP를 사용하여 문서를 생성하고 서명하는 방법에 대해 알아보겠습니다.

FOP 라이브러리 추가하기

먼저, Java Apache FOP 라이브러리를 프로젝트에 추가해야 합니다. 다음은 Maven을 사용하는 경우 pom.xml 파일에 필요한 의존성을 추가하는 예시입니다.

<dependencies>
    <dependency>
        <groupId>org.apache.xmlgraphics</groupId>
        <artifactId>fop</artifactId>
        <version>2.5</version>
    </dependency>
</dependencies>

의존성을 추가한 후 Maven 프로젝트를 업데이트하여 FOP 라이브러리를 다운로드 받을 수 있습니다.

문서 생성하기

FOP를 사용하여 문서를 생성하려면 다음과 같은 단계를 따라야 합니다.

  1. XML 데이터를 통해 문서를 작성합니다.
  2. FOP 설정 파일을 작성합니다.
  3. FOP 사용하여 XML 데이터와 설정 파일을 결합하여 포맷된 문서를 생성합니다.

다음은 간단한 예시 코드입니다.

import org.apache.fop.apps.*;

public class DocumentCreator {
    public static void main(String[] args) {
        try {
            // XML 데이터 작성
            String xmlData = "<document>...</document>";
            
            // FOP 설정 파일 경로
            String fopConfigFile = "fop.xconf";
            
            // FopFactory 초기화
            FopFactory fopFactory = FopFactory.newInstance(new File(fopConfigFile));
            
            // 출력 스트림 생성
            OutputStream out = new FileOutputStream("output.pdf");
            
            // Fop 생성
            Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
            
            // XML 데이터를 포맷된 문서로 변환
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            Source source = new StreamSource(new StringReader(xmlData));
            Result result = new SAXResult(fop.getDefaultHandler());
            transformer.transform(source, result);
            
            // 출력 스트림 닫기
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위의 코드에서는 XML 데이터를 작성한 후 FOP 설정 파일 경로와 함께 FopFactory를 초기화합니다. 그 다음, 출력 스트림을 생성하고 Fop을 생성합니다. 마지막으로 XML 데이터를 포맷된 문서로 변환하는 과정을 거칩니다.

문서에 서명 추가하기

문서에 서명을 추가하기 위해서는 먼저 자신의 서명 정보를 포함하는 X.509 인증서가 필요합니다. 인증서는 개인 키와 서명을 생성한 후, 그 결과를 포함하는 인증 기관에 의해 발급됩니다.

다음은 FOP를 사용하여 문서에 서명을 추가하는 예시 코드입니다.

import org.apache.fop.fonts.*;
import org.apache.xmlgraphics.ps.PSGenerator;

public class DocumentSigner {
    public static void main(String[] args) {
        try {
            // PDF 문서 경로
            String pdfPath = "document.pdf";
            
            // 텍스트 서명 생성
            String signatureText = "Signed by John Doe";
            
            // PDF 문서 로드
            PDFDocument pdfDoc = new PDFDocument(new PDFDataParser(new FileInputStream(pdfPath)));
            
            // 서명 생성
            SignatureText signature = new SignatureText(signatureText);
            signature.setFont("Helvetica");
            signature.setFontSize(12);
            
            // 서명 삽입 위치
            float x = 100; // X 좌표
            float y = 100; // Y 좌표
            
            // 서명 삽입
            PSGenerator gen = pdfDoc.getGraphics().getPSGenerator();
            gen.setColor(new Color(0, 0, 0)); // 서명 색상 설정
            signature.paint(gen, x, y);
            
            // PDF 문서 저장
            pdfDoc.getOutput().save(new FileOutputStream(pdfPath));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위의 코드에서는 PDF 문서 경로와 텍스트 서명을 설정하고, PDF 문서를 로드한 후 서명을 생성합니다. 그 다음, 삽입할 위치를 설정하고 서명을 삽입합니다. 마지막으로 PDF 문서를 저장합니다.

결론

Java Apache FOP를 사용하여 문서를 생성하고 서명하는 방법에 대해 알아보았습니다. 이를 통해 본인의 프로젝트나 작업에 필요한 문서를 생성하고 서명할 수 있습니다. 추가적인 세부 설정이나 고급 기능에 대해서는 Apache FOP 공식 문서를 참고하시기 바랍니다.