FreeType을 사용한 Ghostscript에서의 한글처리

----------------------------------------------------------------------------
hfftype은 공개 트루타입 폰트 래스터라이저인 FreeType라이브러리를 사용하여
Ghostscript에서 Type 0 Composite Font를 사용하는 한글 포스트스크립트 폰트를
한글 트루타입 폰트를 사용하여 에뮬레이션하는 모듈입니다. 현재 버전은
0.2입니다.

특징

   * 기존의 한글 트루타입 폰트를 사용하여 한글 포스트스크립트 폰트와 같이
     사용할 수 있음
   * 가로쓰기, 세로쓰기 지원
   * 일본어 처리 모듈(kfftype)과의 공존

이 드라이버는 Ghostscript에서 일본어 처리를 위한 드라이버를 바탕으로 하여
한글 인코딩에 맞도록 여러 부분을 수정한 것입니다. 따라서 기존의 일본어
처리도 함께 할 수 있으며, 트루타입 폰트를 사용하는 경우 한 문서 안에 한글과
일본어가 같이 존재할 수 있습니다.

hfftype의 기반이 된 kfftype의 버그로 인해 몇몇 포스트스크립트 문서의 경우
가장 첫번째 글자가 원래 크기와 맞지 않게 나오는 경우가 있었습니다. 이 문제는
0.2에서 해결되었습니다. 해결해 주신 kfftype의 저자인 Ichiro
Matsuda(matsuda@itohws01.ee.noda.sut.ac.jp) 님께 감사를 드립니다.
----------------------------------------------------------------------------

설치

필요한 것들

   * FreeType 최신 버전,
     ftp://ftp.physiol.med.tu-muenchen.de/pub/freetype/devel
        o freetype-current.tar.gz
   * Ghostscript소스(본체, 폰트, zlib, libpng, jpeg라이브러리),
     ftp://ftp.cs.wisc.edu/pub/ghost/aladdin/gs510
        o ghostscript-5.10.tar.gz
        o ghostscript-5.10jpeg.tar.gz
        o ghostscript-5.10libpng.tar.gz
        o ghostscript-5.10zlib.tar.gz
        o ghostscript-fonts-other-5.10.tar.gz
        o ghostscript-fonts-std-5.10.tar.gz
   * gs5-vflib 일본어 패치
        o http://www.ldl.jaist.ac.jp/~akr/nonresearch/free-software/ghostscript/gs5.10-vflib-1.1.tar.gz
   * gs5-kfftype 일본어 FreeType패치
        o http://itohws03.ee.noda.sut.ac.jp/~matsuda/VFlib-FT/gs5-kfftype.tar.gz
          (32KB)
        o http://itohws03.ee.noda.sut.ac.jp/~matsuda/VFlib-FT/gs5-kfftype-patch1.diff(Dec.
          16 1997)
        o ftp://jazz.snu.ac.kr/pub/unix/gs-ko/gs5-kfftype-patch2.diff(Jan.
          18 1997)
   * gs5-hfftype 한국어 FreeType패치
        o ftp://jazz.snu.ac.kr/pub/unix/gs-ko/gs5-hfftype-0.2.tar.gz
   * TrueType폰트(일본어, 한국어 등)
        o MS-Windows 95(batang.ttc, gulim.ttc)
        o Bitstream Cyberbit(cyberbit.ttf),
          http://www.bitstream.com/cyberbit/ftpread.htm
        o Unionway KSC(uwkjmf.ttf), http://www.unionway.com/download.htm
        o 한양시스템 웹바탕(web_bt_w.ttc),
          http://www.hanyang.co.kr/webfontnews.html
        o 기타 유니코드 2.0인코딩이나 완성형(Wansung, platform id 3,
          encoding id 5)를 갖는 한글 트루타입 폰트

절차

먼저, FreeType라이브러리를 설치합니다. FreeType라이브러리는 현재 API가
안정되어 있지 않으므로, 공개 베타버전보다는 최신의 시험판을 사용해야 합니다.
편의상 보통 사용자가 해도 좋은 일은 %프롬프트로, 루트 권한으로 해야 하는
일은 #프롬프트로 표기합니다.

FreeType 설치

% tar xzvf freetype-current.tar.gz
% cd freetype-current
% ./configure
% make

FreeBSD사용자는 시스템의 make보다 GNU make를 사용해야 합니다. 패키지에서
gmake패키지를 설치하고, gmake명령으로 컴파일하세요.

FreeType라이브러리는 현재 Makefile의 install타겟을 사용하지 않으므로,
라이브러리는 수동으로 설치해야 합니다. 헤더파일인 freetype.h와 라이브러리인
libttf.a만 설치하면 됩니다.

# cp lib/freetype.h /usr/local/include
# cp lib/libttf.a /usr/local/lib

이제 ghostscript 소스를 설치하면서 몇가지 패치를 해야 합니다. 일단 가장
기본적인 ghostscript의 설치 방법을 진행하겠습니다.

ghostscript풀기

% tar xzvf ghostscript-5.10.tar.gz
% tar xzvf ghostscript-5.10zlib.tar.gz
% tar xzvf ghostscript-5.10libpng.tar.gz
% tar xzvf ghostscript-5.10jpeg.tar.gz
% mv zlib-1.0.4 gs5.10/zlib
% mv libpng-0.96 gs5.10/libpng
% mv jpeg-6a gs5.10/

이제 일본어 처리를 위한 VFlib패치를 합니다. 여기에는 VFlib를 사용하는 폰트를
ghostscript에서 처리하기 위해 소스에 몇가지 패치를 하고, 일본어 폰트를 위한
준비를 위해 ghostscript에 몇가지 초기 파일을 설치합니다. 나중에
kfftype패치를 덮어쓸 것이므로, VFlib를 설치해야 할 필요는 없습니다.

% tar xzvf gs5.10-vflib-1.1.tar.gz
% patch -s -p0 < gs5.10-vflib-1.1/gs5.10-vflib-1.1.diff

이제 VFlib패치와 FreeType라이브러리를 이용해 트루타입 폰트를 사용할 수 있게
해 주는 gs-kfftype 패치를 합니다. kfftype패치는 반드시 gs-VFlib패치 위에
덮어 써야 합니다.

% tar xzvf gs5-kfftype.tar.gz
% cd kfftype
% patch -s < ../gs5-kfftype-patch1.diff

FreeType라이브러리의 최근 API변경과 "첫번째 글자 버그"를 수정하기 위해
패치를 한가지 더 적용해야 합니다. 이에 대한 패치는 hfftype 드라이버 0.2부터
포함되어 있으므로, hfftype드라이버를 패치할 필요는 없습니다.

% patch -s < ../gs5-kfftype-patch2.diff
% cp -r * ../gs5.10
% cd ..

이제 한글 트루타입 폰트 지원을 위한 gs-hfftype 패치를 설치합니다. 이것은
gs-VFlib와 gs-kfftype패치에 의존하므로, 미리 gs-VFlib와 gs-kfftype패치를 해
두어야 합니다.

% tar xzvf gs5-hfftype-version.tar.gz
% cd gs5-hfftype-version
% cp -r * ../gs5.10
% cd ..
% patch -s -p0 < gs5-hfftype-version/gs5.10-hfftype.diff

이제는 일반적인 ghostscript의 컴파일 단계를 거치면 됩니다.

% cd gs5.10

tar_cat은 unix-gcc.mak등의 Makefile들을 다시 만들어 줍니다. gcc-head.mak등을
수정하는 경우에는 반드시 이 명령을 사용하여 Makefile을 다시 만들어 주어야
합니다. 보통 그럴 필요는 없습니다. 일단 unix-gcc.mak파일이 있으면 그냥
그것을 사용하면 됩니다.

% ./tar_cat

사용할 Makefile을 골라서 편집합니다. gcc가 있는 유닉스 시스템의 경우
unix-gcc.mak를 사용하는 것이 가장 일반적입니다. 설치단계에 대한 자세한
사항은 gs소스 안의 make.txt를 참조하세요.

% vi unix-gcc.mak

주로 고쳐야 할 것은 prefix와 GS_LIB_DEFAULT, FEATURE_DEVS정도입니다. 한글와
일본어 처리를 위한 배려는 이미 되어 있으므로 그 부분에 대해 수정할 것은
없습니다. /usr/local이 아닌 다른 곳에 설치하고자 하는 경우에는 prefix를,
시스템이 DPS를 지원하여 Type1폰트가 설치되어 있는 많은 상용 유닉스
시스템(Solaris, AIX, Digital Unix등)에서는 부가적으로 GS_LIB_DEFAULT에
Type1폰트가 저장되어 있는 경로를, gs에서 제공하는 별도 기능을 사용하고자
하는 경우에는 FEATURE_DEVS에 필요한 기능을 추가하세요. 또,
FreeType라이브러리를 사용하는 장치의 올바른 컴파일을 위해서 XCFLAGS에
-I/usr/local/include의 식으로 FreeType라이브러리의 헤더파일 경로를,
XLDFLAGS에 -L/usr/local/lib와 같은 식으로 FreeType라이브러리의 라이브러리
파일 경로를 추가해 주는 것이 좋습니다. 또한 X11라이브러리 관련 경로명도
살펴보아야 합니다. 다 되었으면 컴파일합니다. 기본적으로 Makefile이나
makefile등이 존재하지 않으므로 unix-gcc.mak등을 링크해서 사용해도 좋습니다.

% make -f unix-gcc.mak

컴파일에 문제가 없었으면,

# make -f unix-gcc.mak install

으로 프로그램을 설치할 수 있습니다. ghostscript에는 포스트스크립트 폰트를
설치해야 합니다. 폰트를 설치하려면 다음과 같이 합니다.

# cd prefix/share/ghostscript
# ls
5.10ft
# tar xfz somewhere/ghostscript-fonts-std-5.0.tar.gz
# cd fonts
# tar xfz somewhere/ghostscript-fonts-other-5.10.tar.gz

----------------------------------------------------------------------------

설정

gs의 설치가 끝났으면 사용할 폰트의 위치와 포스트스크립트 이름을 지정해
주어야 합니다. 이것은 일본어의 경우
prefix/share/ghostscript/5.10ft/kanji/kconfig.ps 이고, 한글의 경우는
prefix/share/ghostscript/5.10ft/hangul/hconfig.ps 입니다. 해당 파일을
읽어보면 폰트를 지정하는 방법에 대해 잘 설명이 되어 있습니다. 한글 폰트의
경우

/Batang-Medium       4400000 (/c/sys/hwin95b/fonts/batang.ttc) FreeTypehangul

와 같이 지정합니다. 세번째 컬럼의 경로명은 정확하게 트루타입 폰트를 가리키는
것이어야 합니다. 일본어도 이와 비슷합니다. 사용할 수 있는 폰트는 한글의 경우
유니코드 2.0으로 인코딩된 폰트와 완성형(플랫폼 ID 3, 인코딩 ID 5)폰트만을
지원합니다. 이 경우, Batang-Medium-KSC-EUC-H (가로쓰기)와
Batang-Medium-KSC-EUC-V (세로쓰기)의 두가지 폰트가 만들어지게 됩니다. 이는
CID-Keyed font의 인코딩 방식을 따른 것입니다.
----------------------------------------------------------------------------

검사

지금까지의 설치가 잘 되었는지 알아보기 위해서는 준비된 몇가지의 샘플을
출력해 보면 됩니다. prefix/share/ghostscript/5.10ft/hangul 에는 몇가지
예제들이 있습니다.

allhangul.ps            모든 한글 글자(euc-kr)을 출력합니다.
noneo.ps                세로쓰기의 예제를 볼 수 있습니다.

allhangul.ps는 Batang-Medium-KSC-EUC-H 폰트를, noneo.ps는
Batang-Medium-KSC-EUC-V 와 Gulim-Medium-KSC-EUC-V 를 사용합니다. 이들 폰트를
사용할 수 없거나 다른 이름이라면 해당 ps파일의 앞부분에 폰트 이름을 바꿀 수
있는 부분이 있습니다. 이들 파일을 읽어보았을 때 정상적으로 나오면 잘 된
것입니다.

% ghostview allhangul.ps

[allhangul.ps를 Ghostview로 본 화면]

% ghostview noneo.ps

[noneo.ps를 Ghostview로 본 화면]

일본어와도 공존할 수 있습니다. 다음은 일본어 문서를 본 예입니다. 폰트는 MS
IE 3.0 일본어 키트에 있는 msgothic.ttf를 사용한 것입니다. 일본어 폰트의
지정은 prefix/share/ghostscript/5.10ft/kanji/kconfig.ps 를 수정하면 됩니다.

% ghostview article9.ps

[article9.ps를 Ghostview로 본 화면]

----------------------------------------------------------------------------

사용예

Netscape

CID-Keyed font와 마찬가지로 이는 유닉스용 Netscape의 출력용으로 사용할 수
있습니다. 즉 이전처럼 nhpf나 nhppf없이도 패치된 gs를 사용하여 출력하는 경우
한글 웹페이지의 출력이 가능합니다. 즉 "Print"를 사용하여 웹페이지를 출력하는
경우, 출력된 PS파일을 gs로 필터링해서 출력하면 됩니다. 간단한 필터링 출력에
대해서는 고스트스크립트(gs)를 사용한 프린터
필터링(http://jazz.snu.ac.kr/~junker/doc/gsfilter.html)를 읽어보세요. 단
한글 폰트 이름을 미리 넷스케이프 리소스로 지정해 주어야 합니다. 즉 다음과
같은 X리소스를

Netscape*documentFonts.euc-kr*psname: Batang-Medium-KSC-EUC-H

사용자의 .Xdefaults, .Xresources파일 등에 추가하거나, Netscape의 기본 리소스
파일에 추가해 주면 됩니다(/usr/lib/X11/app-defaults/Netscape등). 이제
X리소스를 다시 읽어들이고(xrdb -merge .Xdefaults와 같이) Netscape에서 한글
문서를 출력해 보세요.

hpscat

hpscat은 기본적으로 한글 포스트스크립트 폰트를 사용하는데, 보통 사용하는
조합형 폰트 이외에 별도로 CID/Type0폰트를 사용할 수 있습니다. 이를 간단히 해
주는 패치를 ftp://jazz.snu.ac.kr/pub/unix/gs-ko/hpscat-jshin-psfont.diff에서
구할 수 있습니다. 패치 안에 있는 hfontname[]배열의 마지막 이름은 여러분이
사용할 폰트이름으로 정해 주세요. 그렇지 않은 경우라도 -hf옵션으로 폰트를
지정할 수 있습니다.

nh2ps

nh2ps버전 2.1에서는 한글 포스트스크립트 폰트를 지원합니다. 이 경우 nh2ps를
실행할 때 -KPS옵션을 주면 됩니다. 폰트는 기본적으로
Batang-Medium-KSC-EUC-H이며, 다른 폰트를 사용하려면 -KPF옵션과 -KPW옵션을
주면 됩니다. 자세한 것은 nh2ps의
홈페이지(http://jazz.snu.ac.kr/~junker/work/nh2ps/)를 보세요.

% nh2ps -KPS han.txt > han.ps

----------------------------------------------------------------------------

버그

알려진 심각한 버그는 없습니다.
----------------------------------------------------------------------------

개선사항

개선하고 싶은 점은 다음과 같습니다.

   * TrueType Collection(.ttc)의 각 서브폰트 지정 기능
   * Italic이나 Bold의 구현

----------------------------------------------------------------------------

기타

   * FreeType은 진행 중인 프로젝트이므로, 예고 없이 API가 바뀌는 경우가
     있습니다. 이 문제에 대해서는 뚜렷한 대책이 없군요.
   * .ttc폰트 안의 첫번째 폰트 말고 다른 폰트를 사용하고
     싶다면(batang.ttc안에 들은 궁서체등을 사용하고자 하는 경우) 현재로는
     breakttc.exe를 사용하는 것이 가장 좋은 방법입니다. 이에 대해서는
     ttf2bdf-k 페이지(http://jazz.snu.ac.kr/~junker/work/ttf2bdf-k/)의
     "프로그램 구하기"를 참고하세요.
   * 공개된 한글 Composite Font가 있었으면 좋겠습니다.

관련 링크

   * Ghostscript with Japanese Fonts,
     http://www.ldl.jaist.ac.jp/~akr/nonresearch/free-software/ghostscript/index.ja.html
     일본어를 ghostscript에서 사용하는 방법에 대한 자세한 설명이 있습니다.
     일본어로 작성되어 있습니다. gs-vflib패치가 있는 곳이기도 합니다.
   * FreeType and VFlib,
     http://itohws03.ee.noda.sut.ac.jp/~matsuda/VFlib-FT/index.html
     FreeType라이브러리를 사용한 VFlib의 FreeType모듈과 gs용의 FreeType
     일본어 드라이버의 홈페이지입니다.

----------------------------------------------------------------------------
[Image] times visited since 20th Jan, 1998

http://jazz.snu.ac.kr/~junker/work/gs-ko/gs-ko-freetype.html
Choi Jun Ho <junker@jazz.snu.ac.kr>
Last modified: Wed Jan 21 11:22:08 1998
----------------------------------------------------------------------------
                            [Jazz | Choi Jun-Ho]
