Autor Beitrag
garv3
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Sa 29.08.09 01:31 
Hallo zusammen!

Ich würde gerne einen Text aus einem Formular heraus drucken. Also hab ich in die Hilfe/API geschaut.
Habe dann wie beschrieben ein PrintDocument Objekt hinzugefügt.
Im Konstruktor hab ich dann die Zeile durch eine zweite erweitert:
ausblenden C#-Quelltext
1:
2:
this.printDocument1 = new System.Drawing.Printing.PrintDocument();
this.printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDocument1_PrintPage);

Im eigentlichen Formularcode habe ich dann die Funktion erstellt:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    e.Graphics.DrawString("SampleText",
    new Font("Arial"80, FontStyle.Bold), Brushes.Black, 150125);
}

Aber wie rufe ich diese Funktion jetzt auf? Was muss ich als 'sender' und 'e' übergeben?

Ich hoffe, mir kann jemand helfen!

Dank und Gruß
garv3


Moderiert von user profile iconChristian S.: Topic aus IO, XML und Registry verschoben am Sa 29.08.2009 um 11:40


Zuletzt bearbeitet von garv3 am So 30.08.09 01:22, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 29.08.09 11:40 
Hallo!

Drucken tust Du, in dem Du die Methode printDocument1.Print() aufrufst.

sender und e werden wie üblich von dem Objekt gefüllt, welches das Ereignis auslöst, in diesem Fall also das PrintDocument. Das ist dann auch der entsprechende sender, welchen Du aber wahrscheinlich nicht brauchen wirst.

Sehr wichtig fürs Drucken sind jedoch die PrintPageEventArgs, denn die enthalten Informationen zu den Abmessungen des druckbaren Bereichs und in denen legst Du fest, ob noch mehr Seiten gedruckt werden sollen.

Der linke Rand des druckbaren Bereichs ist z.B e.MarginBounds.Left, die Breite ist e.MarginBounds.Width. Entsprechend kannst Du in vertikaler Richtung nur von e.MarginBounds.Top an drucken, über einen Bereich der e.MarginBounds.Height umfasst.

Hast Du keinen Platz mehr auf der Seite, musst Du eine neue Seite anfangen. Das machst Du, indem Du e.HasMorePages auf true setzt. Beachte: Das Event für jede Seite einzeln aufgerufen, Du druckst also pro Aufruf der Methode immer nur eine Seite!

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
garv3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Sa 29.08.09 23:12 
Danke für die Antwort!!!

Ich werd mich mal reinarbeiten!
garv3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: So 30.08.09 01:31 
So, das scheint soweit zu gehen.
Allerdings handelt es sich bei dem Drucker um einen Bondrucker (Metapace T-1 - auch bekannt als Samsung SRP-350 oder bixolon SRP350).
Wenn ich z.B. e.Graphics.DrawString("Rechnung", new Font("Arial", 80, FontStyle.Bold), Brushes.Black, 1, 1); aufrufe, schiebt der Drucker ein Stück der Bonrolle heraus und schneidet sie ab.
Allerdings wird leider nichts gedruckt. Es sieht so aus, als wollte er, tut es aber nicht.
Vielleicht ein Problem mit der Schriftar o.ä.
Vielleicht kann man die Schriftart ja auch anders angeben?
Hier gibt es eine Rar-Datei mit Treiber und Manuals. Auch ein paar Codebeispiele (Leider nur VB) sind dabei. Ich werde aber nicht schlau daraus.
Vielleicht kann sich das ja mal jemand von euch ansehen. Komme leider nicht weiter. Das Programm muss nicht mehr können, als eine bestimmte Anzahl von Zeilen in zwei verschiedenen Schrifgrößen bzw. normal und fett auszudrucken. Und eine Tabulatoranwahl wäre nicht verkehrt, damit ich auch einen Teil der Infos rechts drucken kann.
Bitte helft mir, es ist wirklich sehr dringend!

VIELEN DANK!

Mfg
garv3
garv3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Di 01.09.09 00:47 
Nimand eine Ahnung, warum der Drucker nicht korrekt arbeitet?
garv3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mi 02.09.09 01:59 
So, es geht jetzt.
Hier ein Codeausschnitt:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
Rectangle rechteckPapier = e.PageBounds;
Font fontNormal = new Font("Courier New"10, FontStyle.Bold);
RectangleF rechteckTextNormal = RectangleF.Inflate(rechteckPapier, 0, -2 * fontNormal.GetHeight(e.Graphics));
StringFormat sf = new StringFormat();
sf.Trimming = StringTrimming.Word;
sf.Alignment = StringAlignment.Center;
e.Graphics.DrawString("Toller Text", fontNormal , Brushes.Black, rechteckTextNormal , sf);