Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <summary>
        /// Calcula o melhor tamanho da fonte para o texto caber na largura.
        /// </summary>
        /// <param name="text"></param>
        /// <param name="fonte"></param>
        /// <param name="width"></param>
        /// <param name="max"></param>
        /// <param name="min"></param>
        /// <returns></returns>
        public static double AjustarFonte(String text, org.pdfclown.documents.contents.fonts.Font fonte, double width, double max, double min = 6)
        {
            Double size = max;
            double w    = fonte.GetWidth(text, max);

            if (w > width)
            {
                size = (max * width) / w - 0.005F;
                size = Math.Max(min, size);
            }

            return(size);
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        /// <summary>
        /// Conta o número de linhas 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>Número de linhas</returns>
        internal static int CountTextLines(org.pdfclown.documents.contents.fonts.Font font, double fontSize, double width, string text)
        {
            if (string.IsNullOrWhiteSpace(text))
            {
                return(0);
            }

            if (font == null)
            {
                throw new ArgumentNullException("font");
            }

            if (fontSize <= 0)
            {
                throw new ArgumentOutOfRangeException("fontSize");
            }

            if (width <= 0)
            {
                throw new ArgumentOutOfRangeException("width");
            }

            int lines = 0;
            int index = 0, end;

            org.pdfclown.documents.contents.composition.TextFitter tf = new org.pdfclown.documents.contents.composition.TextFitter(text, width, font, fontSize, false, '-');

            while (index < text.Length)
            {
                tf.Fit(index, width, true);
                end = tf.EndIndex;

                // Isso evita um loop infinito, impedindo que o index permaneça o mesmo.
                index = index == end ? end + 1 : end;
                lines++;
            }

            return(lines);
        }