2011-02-16 8 views
6

Tengo un código que imprime una cadena, pero si la cadena es decir: "Blah blah blah" ... y no hay saltos de línea, el texto ocupa una sola línea. Me gustaría poder darle forma a la cuerda para que la palabra se ajuste a las dimensiones del papel.¿Texto de envoltura de texto automático a una página de impresión?

private void PrintIt(){ 
    PrintDocument document = new PrintDocument(); 
    document.PrintPage += (sender, e) => Document_PrintText(e, inputString); 
    document.Print(); 
} 

static private void Document_PrintText(PrintPageEventArgs e, string inputString) { 
    e.Graphics.DrawString(inputString, new Font("Courier New", 12), Brushes.Black, 0, 0); 
} 

supongo que podría averiguar la longitud de un carácter, y envolver el texto de forma manual, pero si hay una construida en la manera de hacer esto, yo prefiero hacer eso. ¡Gracias!

Respuesta

9

Sí, existe la DrawString tiene la capacidad de ajustar la palabra del texto automáticamente. Puede usar el método MeasureString para verificar si la cadena especificada puede dibujarse completamente en la página o no y cuánto espacio se requerirá.

También hay una clase TextRenderer especialmente para este propósito.

aquí es un ejemplo: máximo

  Graphics gf = e.Graphics; 
     SizeF sf = gf.MeasureString("shdadj asdhkj shad adas dash asdl asasdassa", 
         new Font(new FontFamily("Arial"), 10F), 60); 
     gf.DrawString("shdadj asdhkj shad adas dash asdl asasdassa", 
         new Font(new FontFamily("Arial"), 10F), Brushes.Black, 
         new RectangleF(new PointF(4.0F,4.0F),sf), 
         StringFormat.GenericTypographic); 

Aquí he especificado de 60 píxeles como anchura luego medir cadena me dará Tamaño que será necesario dibujar esta cadena. Ahora, si ya tiene un Tamaño, puede compararlo con el Tamaño devuelto para ver si se dibujó correctamente o Truncado

+0

¿Puede vincular y ejemplo o página de referencia? – ja72

+0

Exploré el método DrawString y no pude encontrar la manera de hacer el ajuste automático de palabras. ¿Puedes publicar algún código de muestra? – sooprise

+1

lo hace de forma predeterminada, en su lugar, debe especificar NOWRAP en el parámetro StringFormat si no desea enrutar las palabras –

0

Dude estoy sufriendo con la impresión en HTML, pesadilla total. Diría que, en mi opinión, debería intentar usar algo más para imprimir el texto, etc. pasar los parámetros a los servicios de informes y abrir un PDF que el usuario puede imprimir.

¡O quizás tenga que contar el número de caracteres y especificar explícitamente un salto de línea!

+0

¿Hay una libre y paquete fácil de usar que pueda integrar en mi clase de impresión para soporte de PDF? Estoy teniendo dificultades similares con la impresión de documentos HTML. – sooprise

+0

Usé hace un tiempo pero generalmente un poco de plomería, instalando destilador en el servidor o tratando de generar el formato * GOOGLE *. Estoy usando servicios de informes para configurar el informe y luego bajo el capó llamándolo desde mi aplicación web con la configuración de exportación de PDF. El usuario del sistema no tiene idea de que sus servicios de informes de llamadas funcionan como un encanto, ¡el PDF emerge y el usuario lo imprime! HTML nunca fue diseñado con la intención de imprimir. Es un dolor en el culo ni siquiera ofrecerlo a los usuarios. – Jonathan

10

sooprise, Ha preguntado cómo manejó el texto demasiado tiempo para una página. Yo también quería esto Tuve que buscar mucho tiempo, pero finalmente encontré esto.

http://msdn.microsoft.com/en-us/library/cwbe712d.aspx

private void printDocument1_PrintPage(object sender, PrintPageEventArgs e) 
{ 
    int charactersOnPage = 0; 
    int linesPerPage = 0; 

    // Sets the value of charactersOnPage to the number of characters 
    // of stringToPrint that will fit within the bounds of the page. 
    e.Graphics.MeasureString(stringToPrint, this.Font, 
     e.MarginBounds.Size, StringFormat.GenericTypographic, 
     out charactersOnPage, out linesPerPage); 

    // Draws the string within the bounds of the page 
    e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black, 
     e.MarginBounds, StringFormat.GenericTypographic); 

    // Remove the portion of the string that has been printed. 
    stringToPrint = stringToPrint.Substring(charactersOnPage); 

    // Check to see if more pages are to be printed. 
    e.HasMorePages = (stringToPrint.Length > 0); 
} 

creo que sirve

+0

Gracias pikachu! – KalC

Cuestiones relacionadas