2017-02-24 3 views
0

Ich drucke eine Reihe von Zeichenfolgen durch Drucken Dokumentobjekt in C# und es funktioniert gut. Jede Zeichenfolge wird standardmäßig in einer neuen Zeile gedruckt. Wenn eine Zeichenfolge jedoch mehr Zeichen enthält, als eine Zeile drucken kann, werden die verbleibenden Zeichen abgeschnitten und erscheinen nicht in der nächsten Zeile. Kann mir jemand sagen, wie kann ich die Anzahl der Zeichen für eine Zeile beheben und die überzähligen Zeichen auf der neuen Zeile drucken?Wie zu beheben Linienbreite für den Druck von Dokument Drucken C#

Dank

Antwort

1

Um Ihren Textumbruch am Ende jeder Zeile zu machen, müssen Sie die DrawString Überlastung nennen, die eine Rectangle Aufgabe übernimmt. Der Text wird innerhalb dieses Rechtecks ​​gewickelt werden:

private void pd_PrintPage(object sender, PrintPageEventArgs e) 
{ 
    //This is a very long string that should wrap when printing 
    var s = new string('a', 2048); 

    //define a rectangle for the text 
    var r = new Rectangle(50, 50, 500, 500); 

    //draw the text into the rectangle. The text will 
    //wrap when it reaches the edge of the rectangle 
    e.Graphics.DrawString(s, Me.Font, Brushes.Black, r); 

    e.HasMorePages = false; 
} 
0

Diese nicht best practice sein kann, aber eine Möglichkeit ist, das Array zu spalten, und dann fügen Sie in eine Linie String basierend auf, ob die Zeichenfolge noch sein würde, unter der Linienlänge begrenzen. Denken Sie daran, dass Sie die Buchstabenbreite berücksichtigen müssen, wenn Sie keinen Monospace-Text verwenden.

Beispiel:

String sentence = "Hello my name is Bob, and I'm testing the line length in this program."; 
String[] words = sentence.Split(); 

//Assigning first word here to avoid begining with a space. 
String line = words[0]; 

      //Starting at 1, as 0 has already been assigned 
      for (int i = 1; i < words.Length; i++) 
      { 
       //Test for line length here 
       if ((line + words[i]).Length < 10) 
       { 
        line = line + " " + words[i]; 
       } 
       else 
       { 
        Console.WriteLine(line); 
        line = words[i]; 
       } 
      } 

      Console.WriteLine(line);