Autor Beitrag
ripperle
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 15.07.10 13:19 
Hallo an alle,

in meiner neuen Application möchte ich einen Brief (Name, Anschrift, etc.) automatisch aus einer Datenbank heraus erstellen und Ausdrucken.
.Net liefert schöne funktionen wie print document und print dialog usw. Leider weis ich aber nicht wie ich dieses printdocument belege.
Ich kann ein neues printdocument erstellen und dieses dann auch in der druckvorschau anzeigen lassen, allerdings sehe ich nur eine weiße seite weil ich ja noch nichts reingeschrieben habe...

Wie "schreibe" ich das blatt voll?
Was für funktionen und hilfsmittel stehen mir zur formatierung zur verfügung?
Was ist wenn ich auch nooch ein bild auf die seite einbeziehen will?

Über eure Hilfe wäre ich sehr dankbar!!!

Gruß
Ripperle
reichenberg_reloaded
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 15.07.10 13:25 
Hier habe ich ein kleines Codebeispiel

==>

ausblenden volle Höhe 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:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Printing;


private void drucken2_Load(object sender, PrintPageEventArgs ppeArgs)
        {
            // Erstellt das Graphikobjekt
            Graphics g = ppeArgs.Graphics;
            float linesPerPage = 0;
            float yPos = 0;
            int count = 0;
            // Liest die Bandbreite vom PrintPageEventArgs
            float leftMargin = ppeArgs.MarginBounds.Left;
            float topMargin = ppeArgs.MarginBounds.Top;
            string line = null;
            //Berechnet die Zeilen pro Seite anhand der Höhe der Seite
            linesPerPage = ppeArgs.MarginBounds.Height /
            verdana10Font.GetHeight(g);
            //Liest eine Zeile nachder anderen mit dem Streamreader
            while (count < linesPerPage &&
            ((line = reader.ReadLine()) != null))
            {
                //Berechnet die Starposition
                yPos = topMargin + (count *
                verdana10Font.GetHeight(g));
                //Draw text
                g.DrawString(line, verdana10Font, Brushes.Black,
                leftMargin, yPos, new StringFormat());
                //Geht zur nächsten Zeile
                count++;
            }
//Wenn der PrintPageEventArgs noch mehr Seiten zu drucken hat

            if (line != null)
            {
                ppeArgs.HasMorePages = true;
            }

            else
            {
                ppeArgs.HasMorePages = false;
            }
        }

        private void print_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog fdlg = new OpenFileDialog();
                fdlg.Title = "Titel - Druck";
                fdlg.InitialDirectory = @"C:\ ";
                fdlg.Filter ="Text files (*.txt | .txt | All files (*.*) | *.*";
                fdlg.FilterIndex = 2;
                fdlg.RestoreDirectory = true;

                if (fdlg.ShowDialog() == DialogResult.OK)
                {
                    textBoxX1.Text = fdlg.FileName;
                }

                string filename = textBoxX1.Text.ToString();
                //Deklariert ein StreamReaderobjekt
                reader = new StreamReader(filename);
                //Kreiert die Schriftar mit der Größe 10
                verdana10Font = new Font("Verdana"10);
                //Deklariert ein  PrintDocumentobjekt
                PrintDocument pd = new PrintDocument();
                //fügt PrintPage event handler hinzu
                pd.PrintPage += new PrintPageEventHandler(this.drucken2_Load);
                //Ruft die Druckmethode auf
                pd.PrinterSettings.PrinterName = printersList.Text;

                pd.Print();
                //Close the reader
                if (reader != null)
                    reader.Close();
            }

            catch(Exception a)
            {
                MessageBox.Show("Bitte geben Sie den Drucker an mit dem das Dokument gedruckt werden soll.");
            }
        }


Hilfreich ist der Code allerdings nur wenn du eine ComboBox in deinem Formular hast, sowie wie einen Druck-Button.

PS: Diese Lösung druckt nur txtDateien aus.

Falls du noch Fragen hast dann frag nochmal nach. Ich hoffe meine kommentare helfen für verständniss.
mfg

reichenberg-reloaded
ripperle Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 17.07.10 09:53 
Hi

danke für die antwort....

am liebsten hätte ich in meinem programm ein button auf dem steht "brief bearbeiten" oder so und wenn ich da drauf klicke kommt ein neues fenster bei dem ich die funktionen von word pad benutzen kann und den brief bearbeiten kann....

gruß
ripperle

EDIT: Habe gerade festgestellt das man bei word pad nicht mal tabellen einfügen kann ^^ Also des bräucht ich eig auch noch :)