none
Calcular ancho de una cadena y alto de un RectangleF en PrintDocument RRS feed

  • Pregunta

  • Que tal amigos estoy realizando el formato de un recibo para imprimir usando printDocument, pero resulta que no siempre el texto cuadra en el rectángulo mi código es el siguiente:

    hrec = fuente.Height; float wCad = e.Graphics.MeasureString(cadena, fuente).Width; // --- > =~ 244 if (variasFilas) { if (wCad > wrec) hrec = fuente.Height * (float)Math.Ceiling(wCad / wrec); //Calculo el alto del rectángulo } e.Graphics.DrawString(cadena, fuente , Brushes.Black, new RectangleF(x, y, wrec, hrec), formato);

    // ancho del rectangulo en wrec=150

    // la cadena es.. cadena="pantalon ultracadera americano - s";

    El ancho de la cadena es de 244 y el ancho del rectángulo es 150 haciendo el calculo duplicando el alto del rectángulo sería suficiente para ingresar el texto, pero resulta que no con todos las cadenas funciona, el resultado es algo asi..

    

    lo que veo es que en la primera linea hay un espacio dado que solo admite palabras completas en cada fila y "pantalon ultracadera" no entra en la primera fila entonces lo pasa a la siguiente dejando un espacio, y ese espacio genera que no entre todo el texto, mi pregunta es hay alguna forma de hacer crecer el rectángulo para que ingrese todo el texto automáticamente??....



    • Editado Novatoj lunes, 19 de noviembre de 2018 5:44
    lunes, 19 de noviembre de 2018 5:41

Respuestas

  • Tienes esta sobrecarga del MeasureString: MeasureString(String, Font, Int32)

    Fíjate que toma un parámetro al final que es la anchura con la que quieres pintar el string. Con eso te devuelve la altura "real" que tendrá una vez que el DrawString lo haya separado en fragmentos de dicha anchura.

    • Propuesto como respuesta Pablo RubioModerator lunes, 19 de noviembre de 2018 16:59
    • Marcado como respuesta Novatoj martes, 20 de noviembre de 2018 16:45
    lunes, 19 de noviembre de 2018 7:42
    Moderador