Entwickler-Ecke

Sonstiges (.NET) - Tabulator wird beim Drucken von Textdateien weggelassen


Zonder - Mo 15.02.10 14:54
Titel: Tabulator wird beim Drucken von Textdateien weggelassen
Hallo zusammen, bin neu hier und hab gleich mal eine Frage.

Mein Programm soll eine Textdatei ausdrucken, die Textdatei sieht zb. so aus:

Zeitstempel________X___________Y______________Z
13:23:21__________13__________17_____________37
13:23:23__________4367________818____________0

Das was bei mir ausgedruckt wird, sieht jedoch so aus

Zeitstempel X Y Z
13:23:21 13 17 37
13:23:23 4367 818 0


Der Text in der Textbox in die ich die Textdatei reinlade, sieht genaus aus wie der Text in der Textdatei (selbe Formatierung und \t wird angenommen) nur beim Drucken wird alles verschoben.

Brauche eure Hilfe!



edit: Oh man ich habe bemerkt das hier die Tabulatoren auch nicht angezeigt werden, deswegen dieses underline


Christian S. - Mo 15.02.10 15:22

Hallo und :welcome:!

Wie sieht denn überhaupt der Code zum Drucken aus?

Grüße
Christian

P.S.:

Quelltext
1:
Mit  Code  Tags  geht's!                    


Zonder - Mo 15.02.10 15:34

Hab den Beispielcode von http://msdn.microsoft.com/de-de/library/aa287530(VS.71).aspx verwendet und auch das Beispielprogramm vom Buch
"Visual C# 2008 Das umfassende Handbuch"

Ich weiss zwar nicht ob man es darf aber ich poste hier mal diesen Beispielcode von microsoft


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
System.IO.StreamReader fileToPrint;
System.Drawing.Font printFont;
private void printButton_Click(object sender, EventArgs e)
{
   string printPath = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
   fileToPrint = new System.IO.StreamReader(printPath + @"\myFile.txt");
   printFont = new System.Drawing.Font("Arial"10);
   printDocument1.Print();
   fileToPrint.Close();
}

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
   float yPos = 0f;
   int count = 0;
   float leftMargin = e.MarginBounds.Left;
   float topMargin = e.MarginBounds.Top;
   string line = null;
   float linesPerPage = e.MarginBounds.Height/printFont.GetHeight(e.Graphics);
   while (count < linesPerPage)
   {
      line = fileToPrint.ReadLine();
      if (line == null)
      {
         break;
      }
      yPos = topMargin + count * printFont.GetHeight(e.Graphics);
      e.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, new StringFormat());
      count++;
   }
   if (line != null)
   {
      e.HasMorePages = true;
   }
}



Hab mir jetzt überlegt beim erstellen der Textdatei nicht den Tabulator zu verwenden sondern durch eine Funktion ausrechnen wieviele Leerstellen ich von Variable zu Variable einfügen muss.


danielf - Mo 15.02.10 15:40

Das ist Beispielcode von Microsoft??? Seis drum...

Mich würde auch eher interessieren wie du druckst. Das Beispiel könnte ich ja selbst bei MSDN nachschauen.

Gruß Daniel


Zonder - Mo 15.02.10 15:46

Ich drucke in dem ich auf der "Form" auf dem Button "printButton" Clicke, danach wird die Textdatei (myFile.txt) automatisch gedruckt ohne Abfragen von welchem Drucker, wie viele Seiten, welche Seiten gedruckt werden sollen. Dafür wird der Standartdrucker der von Windows ausgewählt ist verwendet.

Das Komische dabei ist, das die String variable die dan an den Drucker übergeben wird auch die Tabulator Zeichen (\t) enthällt, diese jedoch nicht berücksichtigt werden.

Es gibt ja noch die Funktion vor dem Ausdruck sich die Seitenansicht anzeigen zu lassen und bei dieser werden die Tabulatoren auch schon nicht mehr berücksichtigt.


JüTho - Mo 15.02.10 16:19

Hallo,

das Problem ist in der Tat schwieriger. Ich habe dazu in der SDK-Doku/MSDN/Hilfe einen Artikel Gewusst wie: Festlegen von Tabstopps in gezeichnetem Text gefunden. Dabei muss ein StringFormat (ein spezieller Datentyp!) mit SetTabStops versehen werden und bei DrawString zusätzlich angegeben werden.

Gruß Jürgen


Zonder - Mo 15.02.10 17:16

Danke JüTho das klärt mich jetzt etwas auf