본문 바로가기

카테고리 없음

C# PDF Open Source ItextSharp 한글 출력


얼마전 C#  WinForm 프로그램에서 PDF파일을 만들일이 있어 구글링을 통해 찾아낸 녀석이 바로 itextSharp이다. php에서는 fpdf를 사용했었고 내 나름대로 만족하고 있었는데.

막상 itextSharp을 사용하다 보니 보통 불편한게 아니다. table를 추가할 수는 있지만 table에대한 속성들 넓이나 높이등을 내 맘대로 조정하는 게 보통 어려운게 아니었다.

어찌어찌해서 표를 그리고 글자를 출력해 PDF를 만들었는데.......

이런! 한글을 입력한 곳은 글자가 하나도 안보니는게 아닌가?
C#은 기본이 유니코드니까 당연히 한글이 될줄 알았다. 그런데 아무리 해도 한글이 되지 않는다.

또다시 구글링을 하기 시작했다. 그러나 itextsharp를 사용하는 사람이 국내엔 별로 없는 걸까? 한글로 된 자료는 거의 찾아 볼 수 없을 뿐만 아니라 있어도 전혀 도움이 안되는, 링크를 따라 가면 전혀 다른 내용과 연결되었다.

하룻밤을 꼬박 세우며 해결책을 찾는데 몰두하던 난 중국사람이 올린 포스팅을 보고 해결책을 찾았다.

화면에 '안녕하세요'라는 글자가 포함된 PDF 문서가 표시되는 순간 난 하룻밤의 피로가 싹 사라지는 것 처럼 행복했고, 내가 또 새로운 걸 배웠구나 하는 뿌듯한 마음으로 여기에 그 해결책을 올리려 한다.

fpdf도 마찬가지였는데 한글을 출력하려면 한글 폰트를 제공해 줘야 한다는 것이다. fpdf의 경우에는 별도로 한글 폰트를 지정해 주지 않으면 시스템에 설치된 한글 폰트를 사용하는데 itextshap은 CJK문자의 경우에는 폰트를 별도로 지정해주어야 했다.

난 폰트를 매번 지정하는 것이 귀찮아서 Fontfactory에 아예 등록 시켜 놓고 필요할때마다 불러 쓰는 방법을 선택했다.

Document document = new Document(PageSize.A4.Rotate()); 
BaseFont.AddToResourceSearch("iTextAsian.dll"); 
PdfWriter PdfFile = PdfWriter.GetInstance(document, new FileStream(FileName, FileMode.Create)); 
document.Open(); 
string BatangFont = Environment.GetFolderPath(Environment.SpecialFolder.System) + @"\..\Fonts\batang.ttc"; 
string GulimFont = Environment.GetFolderPath(Environment.SpecialFolder.System) + @"\..\Fonts\gulim.ttc"; 
FontFactory.Register(BatangFont); FontFactory.Register(GulimFont); 
iTextSharp.text.Font HeaderFont = FontFactory.GetFont("바탕체", BaseFont.IDENTITY_H, 16); 
iTextSharp.text.Font TitleFont = FontFactory.GetFont("굴림체", BaseFont.IDENTITY_H, 12); 
iTextSharp.text.Font DataFont = FontFactory.GetFont("굴림체", BaseFont.IDENTITY_H, 10); 

위처럼 폰트 파일의 경로를 사용해서 폰트를 등록한 다음 필요한 글자 크기와 글꼴을 지정해 별도의 폰트를 만든 다음에 출력하면 한글을 이상없이 출력할 수 있다. >