Laden...

Drucken von Labels mit besonderer Schriftart

Erstellt von King-Moe vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.528 Views
King-Moe Themenstarter:in
21 Beiträge seit 2005
vor 16 Jahren
Drucken von Labels mit besonderer Schriftart

Hallo zusammen,

ja ich weiß, der Titel dieses Themas ist evll. mißverständlich, aber ich wüsste nichts besseres..

Mein Problem ist das Folgende: Ich möchte (muss) mit einem Label-Drucker Labels erstellen, die auch 2 Barcodes erhalten. Ich hatte zunächst versucht die Labels als Images zu erstellen und so an den Drucker zu senden. Leider war hier die Qualität des Ergebnisses zu schlecht um die Labels scannen zu können.
Nach Rücksprache mit der technischen Hotline des Herstellers (SATO) wurde mir gesagt, dass ich dem Druckertreiber eine Barcodeschriftart hinzufügen solle.
Diese Schriftarten funktionieren so, dass in Windows dieser Font auswählbar ist, zB in Word, allerding Text der in diesem Font verfasst ist vom Drucker automatisch in Barcode umgewandelt wird. In meinen Windows-Applikationen wie Word funktioniert das auch, wenn ich in meiner C#-Applikation allerdings das Selbe versuche klappt das nicht. Der Drucker schmeisst den Text so raus wie er auch am Bildschirm aussah. Ich vermute dass die mit dem Graphics-Objekt der Print_Page zusammenhängt, und das Framework so die Schrift schon "vorverarbeitet". Klingt alles kompliziert, aber ich hoffe ihr versteht das Problem und habt eine Idee zur Lösung..

G
497 Beiträge seit 2006
vor 16 Jahren

wir haben hier auch einen SATO (CL408e) und nach einiger Probiererei mit Crystal Reports und den Druckerschriftarten bin ich dazu übergegangen, die Barcodes nicht mehr über die druckerinternen Schriftarten, sondern als generiertes Bild zu erzeugen. Ich habe eine Bibliothek (gencode128 von codeproject.com, http://www.codeproject.com/KB/GDI-plus/GenCode128.aspx) dazu benutzt, das Bild zu generieren. Danach wird das Bild in ein Byte-Array umgewandelt, in einem Datatable-Feld abgelegt und über Crystal Reports gedruckt.

King-Moe Themenstarter:in
21 Beiträge seit 2005
vor 16 Jahren

Das hatte ich auch schon probiert (siehe oben), leider sind die Barcodes so klein, dass der Qualitätsverlust zu hoch ist. Die Grafikverarbeitung des Printers ist halt nicht so dolle..

U
228 Beiträge seit 2004
vor 16 Jahren

Ich hatte ebenfalls das Problem mit einem Barcodedrucker. Ich konnte dazu überreden, die barcodes (über den Zeichensatz) auf einen normalen Drucker auszudrucken. In dem Fall mußt du aber das Druckbild selber zeichnen über die Klasse PrintDocument..

King-Moe Themenstarter:in
21 Beiträge seit 2005
vor 16 Jahren

Wie schon gesagt (siehe die beiden Posts von mir); Das funktioniert nicht!!!!

915 Beiträge seit 2006
vor 16 Jahren

Ich weis du hast nun ein paar mal hingeschrieben das es nicht funktioniert hat.

Aber, du hast wirklich beim PrintPageEventHandler die Graphics überschrieben und die passende Font die du auch in Word verwendets benutzt und es hat nicht geklappt (Siehe Beispiel) ? Hatte das damals so eigentlich hinbekommen, man muss nur die Font beim Kundenrechner dann im Setup mit installieren falls nicht vorhanden.


        public void Print()
        {
            PrintDocument tmp = new PrintDocument();

            tmp.PrintPage += new PrintPageEventHandler(tmp_PrintPage);
        }

        private string m_sBarcode = "77782221";

        void tmp_PrintPage(object sender, PrintPageEventArgs e)
        {
            using (Graphics gfx = e.Graphics)
            {
                gfx.DrawString(m_sBarcode, new Font("<FontvomBarcode>", 10.0f), new SolidBrush(Color.Black), 0, 0);
            }
        }

Mir fällt es nur schwer sich vorzustellen dass das nicht geht...
Wie kann man sich den Drucker dann vorstellen A5 Formate oder so nen Bondruckerding den ein normaler Label-Drucker sollte das locker hinbekommen?

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

King-Moe Themenstarter:in
21 Beiträge seit 2005
vor 16 Jahren

Ich mache es genau so:

private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.PageUnit = GraphicsUnit.Millimeter;
            e.Graphics.PageScale = (float)0.1;
            Graphics gr = e.Graphics;
            Font barcodeFont = new Font("SATO-Code128MP", 12);
            gr.DrawString(ean, barcodeFont, new SolidBrush(Color.Black), 320, 20);
        }
915 Beiträge seit 2006
vor 16 Jahren

Hrm, versuch mal das ganze einfach auf ne WindowsForm zu malen indem die Paint Methode überschreibst ob da auch der Text nicht als Barcode erscheint.

Weil, sollte der text der Schrieftart nicht stimmen "SATO-Code128MP" dann malt er automatisch in der Standardforn "Microsoft Sans Serif". Reicht eigentlich schon aus wenn beim Print nen Breakpoint reinsetzt nach gr.DrawString um nachzusehen ob die Font auch wirklich "SATO-Code128MP" heisst.

/ps

Mit dem Codebeispiel kannst ja wenn feststellst das SATO-Code128MP evtl doch nicht der richtige Name sein sollte, dne richtigen heraussuchen, kann ja sein das z.B. nur nen leerzeichen fehlt oder etwas anderes.


foreach (FontFamily _ff in FontFamily.Families)
                Console.WriteLine(_ff.Name);

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

King-Moe Themenstarter:in
21 Beiträge seit 2005
vor 16 Jahren

Die Schrift heisst auf jeden Fall so. Und wie ich oben schrieb wird in Windows kein Barcode angezeigt, und dass soll er auch nicht. Es ist so, dass der Drucker Texte die in dieser Schrift erzeugt sind intern in Barcode umwandelt und ausdruckt.
Nochmals zur Erläuterung:

WORDPAD:
Text: Hallo

Drucker: ||||||||

MEINE APPL:
Text: Hallo

Drucker: Hallo

915 Beiträge seit 2006
vor 16 Jahren

Denke mal du musst unformatierte Daten an den Drucker senden...

Kannst es über DllImport von winspool mal versuchen. Über www.pinvoke.net findest alles was dazu brauchst und in der MSDN bzw. Microsoft Windows Platform SDK findest meistens C++ Code und eben die Beschreibungen dazu.


    [DllImport("winspool.Drv", EntryPoint="WritePrinter", SetLastError=true, ExactSpelling=true, CallingConvention=CallingConvention.StdCall)]
    public static extern bool WritePrinter(IntPtr hPrinter, IntPtr pBytes, Int32 dwCount, out Int32 dwWritten );

Hier nen Link.

Wenn es in Word zu drucken geht, dann machs einfach darüber und spaar dir die Arbeit.
Evtl. weis ja jemand sonst noch eine Lösung.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

G
497 Beiträge seit 2006
vor 16 Jahren

Die Schrift heisst auf jeden Fall so. Und wie ich oben schrieb wird in Windows kein Barcode angezeigt, und dass soll er auch nicht. Es ist so, dass der Drucker Texte die in dieser Schrift erzeugt sind intern in Barcode umwandelt und ausdruckt.
Nochmals zur Erläuterung:

WORDPAD:
Text: Hallo

Drucker: ||||||||

MEINE APPL:
Text: Hallo

Drucker: Hallo

dein Problem ist: die Schriftart ist nur im Drucker bekannt, daher kannst du sie nicht benutzen, um eine Grafik im Programm damit zu erzeugen (und das machst du ja mit DrawString).

Ich kenne als einfache Lösung ansonsten nur noch die Möglichkeit über einen Reportgenerator wie Crystal Reports. Die können auch mit Druckerschriftarten arbeiten.