2011-03-15 179 views
23

que estoy tratando de conseguir la nueva línea, pero si uso \ n no ayuda de ninguna manera a tener nueva línea añadiendo algo a cadena como \ r \ n (no funciona)PDFsharp salto de línea

gfx.DrawString("Project No \n" + textBoxProjNumber.Text, fontUnder, XBrushes.Black, 230, 95); 

no funciona.

+0

si se trata de una especie de modo de consola, ¿qué hay de llamar a DrawString() dos veces? – BlackBear

+0

Lo siento, ¿no lo entendiste? –

+2

intente llamar a DrawString() para cada línea que desea imprimir, por ejemplo, DrawString (Proyecto No "); DrawString (textBoxProj .....); – BlackBear

Respuesta

27

¿Has probado la clase XTextFormatter?

Ver aquí: http://www.pdfsharp.net/wiki/TextLayout-sample.ashx

Fragmento de código:

PdfDocument document = new PdfDocument(); 

PdfPage page = document.AddPage(); 
XGraphics gfx = XGraphics.FromPdfPage(page); 
XFont font = new XFont("Times New Roman", 10, XFontStyle.Bold); 
XTextFormatter tf = new XTextFormatter(gfx); 

XRect rect = new XRect(40, 100, 250, 220); 
gfx.DrawRectangle(XBrushes.SeaShell, rect); 
tf.DrawString(text, font, XBrushes.Black, rect, XStringFormats.TopLeft); 
+0

¿Por qué necesitamos rectángulo en eso? –

+0

Esto funciona. Gracias. Una cosa más que en migradoc cómo hacer que detecte que si el párrafo es más largo que una página e inserta automáticamente el salto de página –

+1

Algo que acabo de encontrar (lo sé pdfsharp ha sido reemplazado por mejores bibliotecas) pero en VB.net tienes que usar + vbNewLine not/n – ShiftyThomas

0

Esto es lo que he hecho que no implica el uso de la clase Rect: Yo tenía un límite lateral derecho definido

y determiné si la cadena actual sería más grande que los límites establecidos. Si lo fue, lo escribí. De lo contrario, continué añadiéndole.

foreach (string field in temp) 
{ 
    if (field == string.Empty) 
    { 
     continue; 
    } 
    else 
    { 
     tempSB.Clear(); 
     tempSB.Append(sb.ToString()); 
     tempSB.Append(field).Append(", "); //append the incoming value to SB for size testing 

     if (gfx.MeasureString(tempSB.ToString(), defaultFont).Width > 500) //if the incoming string is bigger than the right bounds, write it and clear SB 
     { 
      gfx.DrawString(sb.ToString(), defaultFont, blackBrush, 50, currentLine + defaultSpacing); 
      currentLine += 15; 
      sb.Clear(); 
      sb.Append(" " + field).Append(","); //add the overflow to the beginning of the next line 
     } 
     else 
     { 
      sb.Append(field).Append(", "); //if it is not too big, append it 
     } 
    } 

} 
if (sb.Length > 0 && sb[sb.Length - 1] == ',') sb.Length--; 
gfx.DrawString(sb.ToString(), defaultFont, blackBrush, 50, currentLine + defaultSpacing); //write out whatever has not already been written out 

Sé que llego tarde a esta pregunta, pero espero que pueda ayudar a alguien.

+0

Método similar a la clase 'XTextFormatter', pero menos flexible. –