원 문자를 PDF에 출력하기
원형 문자를 PDF에 출력하는데는 여러가지 방법이 있을 수 있습니다.
가장 무식하면서도 간단한 방법은 숫자를 쓰고 숫자 밖에 원을 그리는 것입니다.
하지만 이런 방식으로 하면 미관상 문제가 있고 처리상에서도 약간한 번거로움이 있습니다.
그래서 소개합니다. 이 모든것을 아주 쉽게 처리해주는 폰트 - CombiNumerals Pro 4.0...
하지만 Pro버젼은 라이센스가 있고 별도로 구입해야 하므로 CombiNumerals 폰트를 예제에서 사용하도록 하겠습니다.
CombiNumerals 는
http://www.fontsite.com/Pages/FFDownloads.html 에서 얻을수가있습니다. 사이트 접속이 않될때를 대비하여 첨부파일로 폰트를 올립니다.
CombiNumerals 폰트를 이용하여 원문자를 출력하는것은 아주 쉽습니다.
만약 단일 원숫자를 표시하고싶을때면 폰트를 CombiNumerals 로 바꾸고 숫자만 출력하면 됩니다.
두자리 원숫자를 표시하려면 별도로 작업을 해주셔야 하는데 두가지 키의 조합이라고 보시면 됩니다. 일단 첫 자리 수 즉 십이자리수는 기입한 수의 첫번째 숫자를 사용하고 일이자리수는 기입한 숫자의 두번째 자리 숫자를 Shirt 키를 누른채 기입하면 됩니다.
예를 들면 88을 기입하고 싶으면 실제 8*를 기입하면 됩니다.
이를 쉽게 사용하기 위하여 아래와 같은 맵을 만듭니다.
String [] charMap1 = { ")","!","@","#","$","%","^","&","*","(" };
세자리 이상되는 숫자는 별도로 처리를 해주어야 하는데 CombiNumerals pro에서만 지원하기 때문에 여기서 실제 결과를 보여줄수는 없네요. 하지만 그 처리 방법을 간단히 살펴 본다면 첫번째 자리 및 마지막 자리는 위에서 설명을 드린 두자리 수 처리 방식과 동일하면 가운데 숫자 즉 첫자리수, 마지막자리수를 제외한 기타 자리수는 zxcvbnm,./ 문자로 매핑하여 사용하시면 됩니다.
이를 쉽게 사용하기 위하여 아래와 같은 맵을 만듭니다.
String [] charMap2 = { "/","z","x","c","v","b","n","m",",","." };
실제 숫자만 입력받아서 원문자를 Chunk에 담아 리턴시켜주는 함수를 구현하였는데 아래에 첨부를 합니다. 소스가 쉬우니깐 별도로 분석을 해드리지는 않겠습니다.
소스열기
private static Chunk _getRoundNumber( Integer number, Boolean isBold )
{
String [] charMap1 = { ")","!","@","#","$","%","^","&","*","(" };
String [] charMap2 = { "/","z","x","c","v","b","n","m",",","." };
Chunk chunk = new Chunk();
try {
// 원 문자를 표시하기 위한 폰트 처리를 한다.
String fontPath = LibEnv.getAppRealPath() + "font" + File.separator;
String fontName = new String();
if ( !isBold ) fontName = "CNFREE__.ttf";
else fontName = "CNFREEBD.ttf";
BaseFont bf = BaseFont.createFont(fontPath + fontName,
BaseFont.CP1252, BaseFont.EMBEDDED);
Font font = new Font( bf, 14 );
// 입력 숫자를 지정된 폰트로 표시하여 출력하기 위한 Chunk를 만든다.
chunk.setFont(font);
String numberStr = String.valueOf(number);
String keyValue = new String();
String keyValueEnd = new String();
if ( numberStr.length() != 1 )
{
keyValue = numberStr.substring(0,1);
keyValueEnd = charMap1[Integer.parseInt(numberStr.substring(1,2))];
}
if (numberStr.length() >= 3 )
{
for ( int i = 0; i < numberStr.length() - 2; i ++ )
{
keyValue += charMap2[Integer.parseInt(numberStr.substring(i + 2, i + 3))];
}
}
System.out.println(keyValue + keyValueEnd);
chunk.append(keyValue + keyValueEnd);
} catch (DocumentException de)
{
de.printStackTrace();
} catch (IOException ioe)
{
ioe.printStackTrace();
}
return chunk;
}
/**
* @param number
* @return
*/
public static Chunk getBoldRoundNumber( Integer number )
{
return _getRoundNumber( number, true );
}
/**
* @param number
* @return
*/
public static Chunk getRoundNumber( Integer number )
{
return _getRoundNumber( number, false );
}
아래는 실제 위에 첨부한 메소드를 이용하여 원모양 숫자를 출력한 결과입니다.
2007/11/07 - [자바 어플리케이션/기타 프레임웍들] - iText로 Table을 만들기
댓글 없음:
댓글 쓰기