Samstag, 14. Januar 2012

Drucken mit C#

In diesem Post möchte ich euch zeigen, wie man mit C# den Drucker ansteuern kann.
Hierfür gibt es bestimmt einige Möglichkeiten, ich benutze hier die Graphics Eigenschaft des Druckereignisses, das auszudruckende Resultat muss dann in dieser gezeichnet werden.

Zuerst muss System.Drawing.Printing eingebunden werden.
Die folgende Zeile initialisiert uns das benötigte Objekt, welches das zu druckende Dokument repräsentiert.

PrintDocument PrintDoc = new PrintDocument();

Installierte Drucker sind in PrinterSettings.InstalledPrinters gespeichert. In dieser Liste liegen die Namen der Drucker als Strings vor, zum Setzen des zu benutzenden Druckers benutzen wir PrintDoc.PrinterSettings.PrinterName = PrinterSettings.InstalledPrinters[Index].
Gedruckt wird das Dokument über den Befehl PrintDoc.Print().
Vorher fügen wir dem Druckdokument allerdings eine Ereignisbehandlung für sein Druckereignis hinzu: PrintDoc.PrintPage += new PrintPageEventHandler(PrintPage).
Hierbei ist PrintPage eine beliebige Funktion mit folgender Signatur: void PrintPage(object sender, PrintPageEventArgs e).
Diese wird nun aufgerufen, wann immer ein Dokument gedruckt wird.
In dieser können wir dann das gewünschte Druckresult erstellen, indem wir es in e.Graphics zeichnen. Es können z.B. auch Bilder eingelesen werden und dort hinein gezeichnet werden.
Zum Abschluss der komplette Quellcode, welcher eine Linie und einen String druckt:

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.Drawing.Printing;


namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Print()
        {
            PrintDocument PrintDoc = new PrintDocument();

            List<string> Printers = new List<string>();
            foreach (string p in PrinterSettings.InstalledPrinters)
                Printers.Add(p);

            // Alle verfügbaren Drucker sind in Printers gespeichert, man könnte den Benutzer daraus auswählen lassen.
            // In diesem Beispiel wird einfach immer Drucker 0 gewählt.
            PrintDoc.PrinterSettings.PrinterName = PrinterSettings.InstalledPrinters[0];

            PrintDoc.PrintPage += new PrintPageEventHandler(PrintPage);
            PrintDoc.Print();
        }

        void PrintPage(object sender, PrintPageEventArgs e)
        {
            e.Graphics.DrawLine(new Pen(Color.Black), new Point(0, 0), new Point(100, 100));
            e.Graphics.DrawString("Ich kann jetzt mit C# drucken", new Font("Times New Roman", 12), new SolidBrush(Color.Black), new Point(45, 45));

        }
    }


}

Donnerstag, 5. Januar 2012

String mit Zeichen füllen

Es gibt einen netten kleinen Trick, mit dem man schnell einen String mit einem beliebigen Zeichen auffüllen kann.
Die Klasse string stellt nämlich den folgenden Konstruktor bereit:
new string(meinzeichen, anzahl).
Hierdurch wird ein neuer String bestehend aus anzahl Zeichen mit dem Wert meinzeichen angelegt.
Folgendes Beispiel erzeugt einen String bestehend aus 30 Trennstrichen:

string filled = new string('-', 30);