[java] Java Apache FOP와 폰트 처리

Apache FOP는 Java로 작성된 XSL-FO 포맷을 사용하여 XML 기반의 문서를 PDF, PNG 등의 형식으로 렌더링해주는 오픈 소스 라이브러리입니다. 하지만 기본적으로 제공되는 폰트 외에 다른 폰트를 사용하려면 몇 가지 추가 작업이 필요합니다. 이 글에서는 Java Apache FOP에서 폰트를 처리하는 방법을 알아보겠습니다.

1. 외부 폰트 파일 추가하기

FOP에서 사용할 폰트를 외부 폰트 파일로 추가해야 합니다. 흔히 사용되는 폰트 파일 포맷은 TTF(Truetype Font)이며 이를 FOP에서 사용하기 위해서는 해당 폰트 파일을 클래스 경로에 추가해야 합니다. 폰트 파일을 다운로드 받아 프로젝트의 리소스 폴더에 추가해주세요.

2. FOP 설정 파일 업데이트하기

FOP 설정 파일인 fop.xconf 파일을 열고 <renderer> 태그 안에 폰트 설정을 추가합니다. 다음은 TTF 폰트 파일을 사용할 경우의 예시입니다.

<renderer mime="application/pdf">
   <fonts>
     <font metrics-url="file:///path/to/your.ttf" embed-url="file:///path/to/your.ttf">
         <font-triplet name="YourFontName" style="normal" weight="normal"/>
     </font>
   </fonts>
</renderer>

위의 예시에서 metrics-urlembed-url은 폰트 파일의 경로를 지정합니다. <font-triplet> 요소에서는 폰트 이름, 스타일, 두께를 지정할 수 있습니다.

3. FOP 사용하기

이제 Java 코드에서 FOP를 사용하여 폰트를 렌더링할 수 있습니다. 다음은 간단한 예시입니다.

import org.apache.fop.apps.*;
import java.io.*;

public class FontExample {
   public static void main(String[] args) {
      try {
         FOUserAgent foUserAgent = FopFactory.newInstance().newFOUserAgent();

         // FO 파일 로드
         File foFile = new File("path/to/your/file.fo");
         FileInputStream foInputStream = new FileInputStream(foFile);

         // PDF 파일 출력 스트림 설정
         File outFile = new File("path/to/your/output.pdf");
         FileOutputStream outStream = new FileOutputStream(outFile);

         // 폰트 설정
         foUserAgent.getFontManager().setFontBaseURL("file:///path/to/your/fonts/");
         foUserAgent.getFontManager().setFontCache(new DefaultFontCache());

         // FOP 렌더링
         Fop fop = FopFactory.newInstance().newFop(MimeConstants.MIME_PDF, foUserAgent, outStream);
         TransformerFactory transformerFactory = TransformerFactory.newInstance();
         Transformer transformer = transformerFactory.newTransformer();
         Source src = new StreamSource(foInputStream);
         Result res = new SAXResult(fop.getDefaultHandler());
         transformer.transform(src, res);

         // 출력 파일 닫기
         outStream.close();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

위의 코드에서는 setFontBaseURL 메서드를 사용하여 폰트 파일이 있는 디렉토리를 지정하고, setFontCache 메서드를 사용하여 폰트 캐시를 설정합니다.

이제 Java Apache FOP를 사용하여 폰트 처리를 할 수 있는 방법을 알아보았습니다. 폰트 파일을 추가하고 설정 파일과 코드를 업데이트하면 다양한 폰트를 사용하여 문서를 더욱 다양하고 세밀한 형태로 렌더링할 수 있습니다.


참고문서: