/// <summary> /// Calcula a altura que o texto vai ocupar. /// </summary> /// <param name="font">Fonte do texto</param> /// <param name="fontSize">Tamanho da fonte</param> /// <param name="width">Largura máxima do texto</param> /// <param name="text">Texto</param> /// <returns>Altura que o texto vai ocupar.</returns> internal static double GetTextHeight(org.pdfclown.documents.contents.fonts.Font font, double fontSize, double width, string text) { int lines = CountTextLines(font, fontSize, width, text); double height = font.GetLineHeight(fontSize) * lines; return(height); }
/// <summary> /// Imprime o campo no composer. /// </summary> /// <param name="comp"></param> public void Print(PrimitiveComposer comp, org.pdfclown.documents.contents.fonts.Font fonte, org.pdfclown.documents.contents.fonts.Font fonteBold) { BlockComposer bComp = new BlockComposer(comp); RectangleF pRect = Retangulo.GetPaddedRectangle(PaddingHorizontal, PaddingHorizontal, PaddingSuperior, PaddingInferior); comp.SetFont(fonteBold, TamanhoFonteCabecalho); ValidadeRectangle(pRect, comp); bComp.SafeBegin(pRect, XAlignmentEnum.Left, YAlignmentEnum.Top); bComp.ShowText(Cabecalho.ToUpper()); bComp.End(); bComp.LineSpace = new Length(LineSpace, Length.UnitModeEnum.Absolute); if (!String.IsNullOrWhiteSpace(Corpo)) { org.pdfclown.documents.contents.fonts.Font fonteCorpo = IsCorpoNegrito ? fonteBold : fonte; double largura = fonteCorpo.GetWidth(Corpo, CorpoTamanhoFonte); double novoTamanho = CorpoTamanhoFonte; if (!MultiLinha && largura > pRect.Width) { novoTamanho = (CorpoTamanhoFonte * pRect.Width) / largura - Utils.Mm2Pu(0.005F); comp.SetFont(fonteCorpo, novoTamanho); } comp.SetFont(fonteCorpo, novoTamanho); if (CorpoAlinhamentoY == YAlignmentEnum.Top) { float yOffSet = (float)fonteBold.GetLineHeight(TamanhoFonteCabecalho) + LineSpace; pRect.Y += yOffSet; pRect.Height -= yOffSet; } ValidadeRectangle(pRect, comp); bComp.SafeBegin(pRect, CorpoAlinhamentoX, CorpoAlinhamentoY); bComp.ShowText(Corpo); bComp.End(); } comp.SafeDrawRectangle(Retangulo); }