Adobe ColdFusion과 Railo, Open BD 모두 CFDOCUMENT 태그를 이용하여 동적으로 PDF파일을 생성할 수 있습니다. Adobe ColdFusion과 Open BD는 IText라는 Open Source Java library를 이용하고 있고, Railo는 기본적으로 PD4ML 이라는 상용 library를 이용하고 있습니다. 물론 세가지 제품 모두 PDFBox나 PD4ML을 이용할 수 도 있습니다.
하지만 IText나 PDFBox, PD4ML 등의 Java library는 한글(일본어, 중국어 포함)의 표기에 문제가 있습니다. Encoding이 맞지 않거나, 해당 언어의 서체가 시스템에 설치되어 있지 않는 경우 ????와 같이 글자가 깨져 보이게 됩니다. 이중에서 Adobe ColdFusion의 경우 http://www.nooree.com/blog/post.cfm/coldfusion-cfdocument-pdf에서 처럼 ColdFusion 설치 디렉토리내의 lib 디렉토리의 cffont.properties.ja 파일을 이용해서 cffont.properties.ko을 생성하므로써 한글 표기 문제를 해결할 수 있습니다.
하지만, Railo나 Open BD의 경우 해당 CFML엔진 자체가 Open Source이고, 제작자가 영어권의 개발사이다 보니 2Byte 문자권의 지원이 미비한 것이 사실입니다. 물론 UTF-8과 같은 Unicode환경을 이용하면 어느 정도 해결 가능하지만, JRE의 encoding 설정도 중요한 변수중의 하나입니다. 사실 http://www.nooree.com/blog/post.cfm/railo-cfdocument-double-byte-characters-problem에서 처럼 Railo에서 CFDOCUMENT태그로 PDF를 생성할때 2Byte 언어의 표현에 있어 문제가 있어, 일본의 개발자가 Railo의 유저그룹에 문의를 했지만, 2Byte언어를 쓰지 않는 서구인들에게는 그다지 큰 문제나, 또는 해결방안을 찾는데 있어 약간 어려움이 있는 것도 사실입니다.
Railo CFDOCUMENT PDF - 2Byte character problem
Railo에서 PDF를 동적으로 생성하기 위해서는 다음과 같은 CFML코드를 쓰게 됩니다. (Adobe ColdFusion이나, Open BD에서도 동일 합니다.)
<cfprocessingdirective pageEncoding="utf-8">
<cfdocument format="PDF" pageType="A4">
한국어 공부합시다.<br />
日本語を勉強しましょう。
</cfdocument>

자, 기본적으로 Railo의 Administrator의 Character set을 UTF-8로 지정했다고 하더라도 아마 화면에는 깨져 보이게 됩니다. 물론 Stylesheet를 지정해서 Font를 선택한다고 하더라도, 정상적인 한글, 일본어 표기는 불가능합니다. 사실 이 문제는 동양권 ColdFusion 개발자, 더욱이 Railo를 주로 쓰는 개발자만이 뼈저리게 해결하고 싶은 문제일 것 입니다. 부끄럽지만 저는 오늘 토요일 오후 시간을 다 투자해서 이것을 해결해 보려고 합니다. 사실 방법을 알고 시작한게 아니기 때문에, 찾고나서는 참으로 허탈하였지만, 일단 몇가지 단서를 찾아보기로 했습니다.
우선, Adobe ColdFusion과 Railo, Open BD에서 기본적으로 쓰이는 PDF생성 library를 찾아 보았습니다. 일단 오류가 나더라도, CFDOCUMENT 태그로 PDF를 각각 생성했는데, Adobe ColdFusion과 Open BD의 경우 IText를, Railo는 기본적으로 PD4ML을 쓰고 있었습니다. 이상하게도 상용 서버인 Adobe의 제품과 Open BD는 공개 library를 쓰고 있고, Open Source 엔진인 Railo는 상용 PD4ML library를 쓰고 있네요. PD4ML에서 2Byte 문자를 제대로 표현할 수 없는 2가지 문제는 상용버전인 Pro버전을 쓰지 않는 경우와, 해당 언어를 지원할 Font가 없는 경우 입니다. 결론적으로 Railo에서는 Pro버전인듯 합니다.
자, 이제 하나씩 해결해 보기로 합니다. 우선 Railo의 lib 디렉토리안에 보면, fonts.jar 파일이 있습니다. 이 파일을 Consol창에서 압축을 풉니다. (JRE의 명령서 jar를 씁니다. 아래와 같이 명령어를 쓰지 안않고 흔한 7zip, 알집 등으로 풀어도 됩니다.)
그러면 해당 디렉토리안에 다음의 폰트와 정의 파일인 pd4fonts.properties가 있습니다. Adobe ColdFusion의 cffont.properties와 같은 기능을 하는 파일입니다. Railo는 Adobe ColdFusion이나 Open BD와 같은 Font Manager가 없기 때문에 font의 추가가 좀 고생스럽습니다.

pd4fonts.properties의 내용은 다음과 같습니다.
#this is an autogenerated file. please remove manually any references to copyrighted fonts
#Fri Apr 17 20:00:52 CEST 2009
Arial=arial.ttf
Arial\ Bold=arialbd.ttf
Arial\ Bold\ Italic=arialbi.ttf
Arial\ Italic=ariali.ttf
Courier\ New=cour.ttf
Courier\ New\ Bold=courbd.ttf
Courier\ New\ Bold\ Italic=courbi.ttf
Courier\ New\ Italic=couri.ttf
Times\ New\ Roman=times.ttf
Times\ New\ Roman\ Bold=timesbd.ttf
Times\ New\ Roman\ Bold\ Italic=timesbi.ttf
Times\ New\ Roman\ Italic=timesi.ttf
여기에 새로운 서체를 추가해 줍니다. 물론, 한국어 서체, 일본어 서체 등을 추가해야 합니다만, 흔히 한글 Windows환경에서 쓰이는 굴림(Gulim), 돋움(Dotum) 등의 서체는 ttf가 아닌 ttc포맷이고, 또 라이센스 문제가 발생합니다만, 이렇게 할 수 있다 정도로만 봐 주세요. 네이버의 나눔고딕이나, 나눔명조와 같이 공개된 서체를 이용해도 됩니다. 다만, 꼭 Windows기본서체인 굴림과 같은 ttc폰트를 이용해야 하는 경우 반드시 먼저 ttc폰트를 ttf로 풀어줘야 합니다. MS-DOS 응용프로그램중에 Breakttc.exe라는 것이 있는데 구글에서 검색해 보면 사용법과 프로그램을 구할 수 있습니다. 이 부분의 설명을 생략하겠습니다.
pd4fonts.properties의 내용을 다음과 같이 임의 변경합니다. 아래의 서체지정은 가장 기본적인 Windows의 맑은고딕체, 굴림, 돋움, 궁서, 바탕, Century Gothic, Tahoma, Verdana과 함께 공개 서체인 나눔고딕, 나눔명조, 다음고딕, 그리고 일본어와 중국어를 위한 MS Mincho 등의 서체를 간략하게 지정한 것입니다. = 기호를 중심으로 왼쪽은 CSS에서 쓸 서체명이고, 오른쪽은 fonts.jar로 패키지할 실제 ttf폰트 파일명입니다. 정확하게 지정해야 서체를 쓸 수 있습니다.
#this is an autogenerated file. please remove manually any references to copyrighted fonts
#Fri Apr 17 20:00:52 CEST 2009
Arial=arial.ttf
Arial\ Bold=arialbd.ttf
Arial\ Bold\ Italic=arialbi.ttf
Arial\ Italic=ariali.ttf
Arial\ Unicode=ARIALUNI.TTF
Batang=Batang.TTF
Batangche=Batangche.TTF
Courier\ New=cour.ttf
Courier\ New\ Bold=courbd.ttf
Courier\ New\ Bold\ Italic=courbi.ttf
Courier\ New\ Italic=couri.ttf
Daum_Regular=Daum_Regular.ttf
Daum_SemiBold=Daum_SemiBold.ttf
Dotum=Dotum.TTF
Dotumche=Dotumche.TTF
Century\ Gothic=GOTHIC.TTF
Century\ Gothic\ Bold=GOTHICB.TTF
Century\ Gothic\ Bold\ Italic=GOTHICBI.TTF
Century\ Gothic\Italic=GOTHICI.TTF
Gulim=Gulim.TTF
Gulimche=Gulimche.TTF
Gungso=Gungso.TTF
Gungsoche=Gungsoche.TTF
Malgun=MALGUN.TTF
Malgun\ Bold=MALGUNBD.TTF
MS\ Gothic=MSGothic.TTF
MS\ Mincho=MSMincho.TTF
MS\ PGothic=MSPGothic.TTF
MS\ PMincho=MSPMincho.TTF
MS\ UI\ Gothic=MSUIGothic.TTF
Yahei=MSYH.TTF
Yahei\ Bold=MSYHBD.TTF
Nanum\ Gothic=NanumGO.ttf
Nanum\ Gothic\ Bold=NanumGOBold.ttf
Nanum\ Gothic\ Extra\ Bold=NanumGOExtraBold.ttf
Nanum\ Myongjo=NanumMJ.ttf
Nanum\ Myongjo\ Bold=NanumMJBold.ttf
Nanum\ Myongjo\ Extra\ Bold=NanumMJExtraBold.ttf
SimHei=SIMHEI.TTF
SimSun\ Bold=SIMSUNB.TTF
Tahoma=TAHOMA.TTF
Tahoma\ Bold=TAHOMABD.TTF
Times\ New\ Roman=times.ttf
Times\ New\ Roman\ Bold=timesbd.ttf
Times\ New\ Roman\ Bold\ Italic=timesbi.ttf
Times\ New\ Roman\ Italic=timesi.ttf
Trebuchet\ MS=TREBUC.TTF
Trebuchet\ MS\ Bold=TREBUCBD.TTF
Trebuchet\ MS\ Bold\ Italic=TREBUCBI.TTF
Trebuchet\ MS\ Italic=TREBUCIT.TTF
Verdana=VERDANA.TTF
Verdana\ Bold=VERDANAB.TTF
Verdana\ Italic=VERDANAI.TTF
Verdana\ Bold\ Italic=VERDANAZ.TTF
자, pd4fonts.properties를 UTF-8형식으로 저장하고, ttf폰트 파일 준비가 끝났다면 다시 Consol에서 jar파일을 패키징 해 합니다. 패키징은 알집 등과 같은 Window용 압축프로그램을 이용할 수 없으므로, Windows환경이라면 DOS Consol에서 Linux라면 Shell Consol상태에서 명령어를 입력하여 패키징 합니다. (이 부분은 설명 대상이 본 글과는 좀 거리가 있기 때문에 검색 등을 하여 별도로 찾아 보세요. 참고 : http://uniksy1106.tistory.com/76) 임의 디렉토리인 fonts안에 기본서체와 본인이 추가하고자 하는 서체들을(모두 ttf 일이여야 합니다.) 복사하고, fonts 폴더안의 모든 서체와 pd4fonts.properties파일을 하나의 jar 파일로 재 패키징합니다. 쉽게 말해 원래 Railo안의 fonts.jar 파일안에 한글, 일본어지원 서체가 없으므로 한글서체, 일본어서체 등을 넣고, pd4fonts.properties에 재정의하여 다시 fonts.jar 파일을 만든다고 보시면 되겠습니다.
| jar cvf fonts.jar fonts/* |
패키징된 fonts.jar 파일을 Railo의 lib안의 원본 fonts.jar을 덮어씁니다. 그런 다음 Resin 또는 Tomcat등 Railo의 기반 Servlet엔진 자체를 재시작해 줍니다. 자, 이제 정상적으로 나타나는지 테스트 해 볼 까요? 다음의 코드를 작성하고, cfdocument.cfm파일로 저장한 후 브라우저에서 요청해 봅시다. 한글과 일본어가 잘 표시 되지요?
<cfdocument format="PDF" pageType="A4">
< style type="text/css">
< !--
.font_korean {
font-family: "Batang";
}
.font_japanese {
font-family: "MS Mincho";
}
-- >
</style >
<div class="font_korean">
신속하게 인터넷 애플리케이션 구축, 배포 및 유지 관리<br /><br />
Adobe® ColdFusion®을 사용하면 개발자는 강력한 엔터프라이즈용 인터넷 애플리케이션을 신속하게 구축하고 배포 및 유지 관리할 수 있습니다. 최근에 출시된 ColdFusion 9를 사용하면 복잡한 비즈니스 로직을 매우 적은 코드로 간결하게 작성할 수 있습니다. 이와 함께 사용할 수 있는 ColdFusion Builder는 컨셉 설정에서부터 배포에 이르는 ColdFusion 애플리케이션 개발 과정을 효율적으로 관리할 수 있는 Eclipse 기반의 IDE로서 Adobe Labs에서 다운로드할 수 있습니다. 이 두 제품의 완벽한 툴과 서비스를 사용하여 강력한 리치 인터넷 애플리케이션을 개발할 수 있습니다.
</div>
<br /><br />
<div class="font_japanese">
インターネットアプリケーションをすばやく開発、デプロイ、管理<br /><br />
Adobe® ColdFusion®は、パワフルなエンタープライズインターネットアプリケーションの迅速な開発、デプロイ、管理をサポートします。最新リリースのColdFusion 9を使用すれば、複雑なビジネスロジックを少ないコードに凝縮できます。また、コンセプトからデプロイに至るまでColdFusionアプリケーションを効率良く管理するためのEclipse™ベースのIDEであるAdobe ColdFusion Builder™をColdFusion 9とともに提供。Adobe Labsで公開しています。ColdFusionとColdFusion Builderを組み合わせれば、リッチでパワフルなインターネットアプリケーションを作成するためのツールとサービスがすべて揃います。
</div>
</cfdocument>
Sample view : http://www.nooree.com/samples/railopdf/cfdocument_pdf.cfm

사실 이 문제는 Railo 그룹스에 알려야 할 문제이지만, Font 등의 라이센스 문제때문에 사실상 한글 서체를 Railo에서 미리 내장할 수 있을지는 미지수 입니다. 일단 패키지화 해서 배포하려면 정식으로 라이센스를 구매해야 합니다. 일반적으로 굴림체와 같은 Windows서체는 흔히 복사하고 배포하고 있지만, 사실은 Microsoft사의 고유 저작권이 있고, 또 49달러나 하는 비교적 비싼 서체라는 것을 아는 분은 거의 없을 듯 합니다. 따라서 Railo의 fonts.jar파일에 안에 패키징 할 서체는 정식으로 라이센스가 확보된 서체만 패키징해서 써야 합니다. Microsoft의 서체목록을 보시려면 http://www.microsoft.com/typography/fonts/family.aspx을 방문하세요.
pd4fonts.properties sample