Nadeldruck in C #?

8

Ich versuche, von C # auf Nadeldrucker (verschiedene Modelle) zu drucken, momentan verwende ich Win32 API (Sie können viele Beispiele online finden), um Escapecodes direkt von meinem C # an den Drucker zu senden. Anwendung. Das funktioniert großartig, aber ...

Mein Problem ist, weil ich die Escape-Codes erzeuge und mich nicht auf das Windows-Drucksystem verlasse. Die Ausdrucke können nicht an "normale" Drucker oder an Dinge wie PDF-Druckertreiber gesendet werden. (Dies verursacht jetzt ein Problem, wenn wir versuchen, die Anwendung auf einem 2008 Terminal Server mit Easy Print [Was ist XPS basiert])

zu verwenden

Die Frage ist: Wie kann ich formatierte Dokumente (Rechnungen auf vorgedruckten Papierdokumenten) an Nadeldrucker (Epson, Oki und Panasonic ... verschiedene Modelle) aus C # drucken, ohne Direktdruck, Escape-Codes usw. zu verwenden.

** Nur um zu verdeutlichen, ich versuche Dinge wie GDI + (System.Drawing.Printing), aber das Problem ist, dass es sehr schwer ist, Dinge wie den alten Code in eine Reihe zu bringen. (Der alte Code schickte die Zeichen direkt an den Drucker, wobei der Windows-Treiber umgangen wurde.) Irgendwelche Vorschläge, wie Dinge verbessert werden könnten, so dass sie GDI + verwenden könnten, aber immer noch wie der alte Code aufgereiht?

    
Dale 29.10.2008, 09:34
quelle

8 Antworten

10

Sie sollten wahrscheinlich ein Berichtstool verwenden, um Vorlagen zu erstellen, mit denen Sie oder Benutzer die Felder in Bezug auf das vorgedruckte Briefpapier richtig positionieren können.

Bei Nadeldruckern müssen Sie grundsätzlich in zwei Modi arbeiten:

  • einfacher Schreibmaschinenmodus für Zeilen- / Spaltentext, in dem Sie Escape-Sequenzen senden, um eine kleine Anzahl von Schriftarten zu verwalten, die in der Druckerhardware enthalten sind und die Zeilenrückläufe usw. verwalten müssen.
  • Grafikausgabe, bei der die Seite gerastert wird und der Druckertreiber nur den Druckkopf und die Pins antreibt, um die Punkte auszugeben.

Die erste Verwendung ist unter Windows meist veraltet, da sie nicht viel Kontrolle über die Ausgabe bietet und jeder Drucker mit seinen eigenen Eigenschaften unhandlich und schwer für die Software ist, Dinge auf der Seite vorherzusagen und zu positionieren (Nr WYSIWYG).

Die zweite verwendet nur ein Grafikseitenparadigma, das die Positionierung von Text und Grafiken unabhängig von den tatsächlichen Fähigkeiten des Druckers macht.
Wenn Sie vorgedrucktes Briefpapier verwenden, müssen Sie die Daten auf der Seite richtig positionieren.
Dies von Hand zu tun ist ressourcenaufwendig und das Erstellen des Layouts im Code ist sicherlich nicht zu empfehlen, da Sie bei Änderungen des Druckers, des Seitenformats oder des gedruckten Briefpapiers mit Code stecken bleiben.

Am besten verwenden Sie einfach das von .Net angebotene Standarddruckmodell und ein Berichtstool, mit dem Sie Modelle und Vorlagen definieren können, in denen der richtige Text und die richtigen Grafiken positioniert werden, und diese dann aus dem Code übernehmen.

Visual Studio wird mit einer Version von Crystal Reports ausgeliefert, aber es gibt andere, bessere Berichtssysteme (ich verwende beispielsweise das von Entwickler Express ) ), einige von ihnen sind sogar kostenlos .

    
Renaud Bompuis 30.10.2008, 10:31
quelle
5

Aus meiner Erfahrung ist es einfacher, zwei Arten von Berichten für die gleichen Daten zu verwenden:

  • ein Bericht für Nadeldrucker mit Escape-Codes und alles andere ist erforderlich, das in einer Textdatei gespeichert und dann mit verschiedenen Methoden gedruckt wird ( type file.txt > lpt1 oder Auswahl im Code des Standarddruckers und Verwendung von NOTEPAD /P file.txt ) - siehe diese Seite für weitere Druckmethoden.
  • ein weiterer Bericht für Laser- / Tintenstrahldrucker, der ein Berichtserstellungstool verwendet (Crystal Reports, Berichts-Manager , RLIB oder etwas verfügbares

Da es nicht ungewöhnlich ist, den richtigen Druckertyp für die richtige Art von Bericht zu kaufen, hat dieser Ansatz den Vorteil, dass der Kunde entscheiden kann: Nadeldrucker für Textberichte im A3 / A4 Papierformat (normalerweise für die Buchhaltung) Abteilung) oder Laser / Tintenstrahldrucker für grafische Berichte.

    
alexandrul 30.10.2008 10:59
quelle
4

Ich kann nicht die Escape-Sequenz in C # verwenden. Aber ich habe alle Escape Sequence für Generic / Text Only Drucker. Hoffe es hilft.

Generische Druck-Escape-Sequenz 1) Zeilenabstand einstellen a) 1/8 Zoll - 27,48 b) 1/6 Zoll - 27,50

2) Wählen Sie Entwurfsqualität a) 27,120,0 / 27,120,48

3) Briefqualität a) 27,120,1 / 27,120,49

4) Doppelte Höhe a) 27,119, n i) n = 1 Ein ii) n = 0 Aus

5) Bidirektionales Drucken a) 27,85, n i) 0 - Beide Richtungen ii) 1 - Ein Weg

6) Vergrößern Sie den Zeichenraum a) 27,32, n (Zunahme um n / 12 Zoll)

7) Wählen Sie Fettschrift a) 27,69

8) Bold Font abbrechen a) 27,70

9) Wählen Sie Kursivschrift a) 27,52

10) Abbrechen Kursivschrift a) 27,53

11) Wählen Sie a) 10 cpi 27,8 b) 12cpi 27,77 c) 15 cpi 27 103 d) 18cpi 27,103

12) Setzen Sie den rechten Rand a) 27,81, n

13) Legen Sie den linken Rand fest a) 27,108, n

14) Formularzuführung a) 12

15) Komprimiertes Drucken a) 0F Ein b) 12 Aus

16) Doppelschlagdruck a) 27,71

17) Strike-Druck abbrechen a) 27,72

18) Unter Linie a) 27,45,0 Aus b) 27,45,1 Auf

19) Doppelte Breite a) 27,84,0 Off b) 27,84,1 ON

    
Avani 23.02.2009 07:46
quelle
4

Konvertieren Sie zuerst die Sequenzbefehle in Zeichen und übergeben Sie sie dann an den Drucker

Beispiel Fettschrift 27,69

string.Format ("{0} {1}", Convert.ToChar (27), Convert.ToChar (69));

Vielleicht ein bisschen kürzer als:

string.Format ("{0} {1}", (Zeichen) (27), (Zeichen) (69));

    
Friend 27.03.2009 08:41
quelle
1

Sehen Sie sich den Namespace von System.Drawing.Printing an

    
Tim Robinson 29.10.2008 20:10
quelle
0

Wenn auf Ihrem Drucker Treiber installiert werden müssen, können Sie das normale Windows-Drucksystem verwenden. Die meisten Drucker, einschließlich POS-Drucker, verfügen über funktionierende Windows-Treiber. (Die meisten Nadeldrucker sind ohnehin mit Epson kompatibel.) Einige POS-Druckertreiber ermöglichen das Senden von Escape-Codes auch direkt an den Drucker (mit speziellen Schriftarten). Wahrscheinlich brauchen Sie solche Funktionalität nicht.

Wenn dies nicht der Fall ist, können Sie den Drucker "Allgemein / Nur Text" (Treiber) mithilfe des Druckerinstallations-Assistenten hinzufügen. Danach können Sie bestimmte Befehle (Escape-Sequenzen) dafür konfigurieren - Schriftgröße 10/12/17, Fett ein / aus, Unterstrichen ein / aus, Job Start / Stopp, Papiervorschub und Größenauswahl.

Ich verwende einen generischen Drucker, der mit dem FILE-Port verbunden ist, um verschiedene Berichte für POS-Drucker zu testen - es ist einfach, eine Textdatei zu betrachten, um Zahlen im Ausdruck zu validieren. Zur Formatierung ist natürlich ein spezieller Druckertreiber erforderlich.

    
Arvo 29.10.2008 20:30
quelle
0

Es scheint, dass das, was ich gerne tun würde, nicht möglich ist.

Meine Druckoptionen werden nicht direkt an den Drucker (mit winspool.drv) übergeben, was mir erlaubt, mit dem Drucker alles zu machen, was ich möchte, und mir die Möglichkeit zu geben, die Dinge einfach zu gestalten. VB.NET Beispiel Oder ich kann GDI + (System.Drawing.Printing) verwenden, was kompliziert ist, um Dinge in die richtige Reihenfolge zu bringen arbeiten mit Nicht-Nadeldruckern wie XPS- und PDF-Druckern.

    
Dale 30.10.2008 07:28
quelle
0

Sie können diese Ссылка beziehen hoffe helpd

    
IlPADlI 10.08.2015 03:04
quelle

Tags und Links