크리스탈리포트] 필드 - 컨텐츠에 따라 폰트사이즈 변경
크리스탈 리포트에서 필드에 고정된 폰트를 글자수에 맞춰 폰트사이즈를 줄여 꽉 차도록 만드는 소스!
## 크리스탈 리포트 TextBoxObject 의 꽉 채우기 : 글자수에 따라 FontSize조정하는 방법
-- 바인딩 될 데이타 중 FontSize조정 할 대상 목록을 만듬.
Dictionary<string, string> KeyValues = new Dictionary<string, string>();
-- 데이타 바인딩
KeyValues.Add("{필드오브젝트ID}", "{필드오브젝트에 바인딩 될 때의 값}" );
...
-- 로드 이벤트!
bool IsContentLoaded = false;
void Form_Loaded(object sender, RoutedEventArgs e)
{
if (IsContentLoaded == false)
{
if (CrystalReportViewer1.Created)
{
IsContentLoaded = true;
foreach (var tar in KeyValues)
{
var fieldObject = crRpt.ReportDefinition.ReportObjects[tar.Key];
var field = ((CrystalDecisions.CrystalReports.Engine.FieldObject)(fieldObject));
Font font = CalcFont(tar.Value, field.Width, field.Font);
field.ApplyFont(font);
}
CrystalReportViewer1.Refresh();
}
}
}
-- 폰트사이즈 조정.
private Font CalcFont(string txt, double limitTwipsWidth, Font font)
{
const double TwipsPerInch = 1440d;
// todo : 박스안에 들어갈 폰트사이즈 구하기
// Font.Size 에서 8pt까지 줄여가면서 계산.
// 1 inch = 1440 twip
// 1 cm = 567 twip
Font newFont = font;
using (var g = CrystalReportViewer1.CreateGraphics())
{
//http://stackoverflow.com/questions/1918877/how-can-i-get-the-dpi-in-wpf
//http://stackoverflow.com/questions/4044397/how-do-i-convert-twips-to-pixels-in-net
int limitWidth = (int)((limitTwipsWidth / TwipsPerInch) * (g.DpiX));
for (float size = font.Size; size >= 3f; )
{
SizeF szf = g.MeasureString(txt, newFont);
if (szf.Width <= limitWidth)
{
break;
}
newFont = new Font(newFont.FontFamily, size, System.Drawing.FontStyle.Bold);
size -= 0.1f;
}
}
return newFont;
}
'# 3) .Net ( Vs 2008 ) > C#' 카테고리의 다른 글
Flow 상세내용 입력하기... (0) | 2018.05.01 |
---|---|
지연자동 조회 처리 (0) | 2016.03.10 |
Excel 만들기, 엑셀 닫기 (0) | 2016.02.17 |
변환] Unicode <--> 한글 (0) | 2013.10.24 |
ppt 처럼 썸네일과 본화면이 있는 컨트롤! (0) | 2013.09.26 |