# Drucken von Escape-Sequenzen



## FabianG (7. Feb 2012)

Hallo Java Forum 

Ich habe letzte Woche meinen alten Thermo Drucker (Epson TM-T88II) ausgegraben.
Nun will ich ein Programm schreiben, mit welchem ich "Escape-Sequenzen" direkt zu den Drucker senden kann.

Ich möchte gern ein Programm haben, welches die zwei Font's drucken kann (Font A und B) und wenn er alles gedruckt hat, soll es den Kassenbon abtrennen.
Ich habe leider absolut keine Ahnung wie das gehen soll...

Die GUI habe ich bereits erstellt und die Befehle, welche es ermöglichen den Inhalt des JtextPane's in eine Textdatei zu speichern und diese wieder laden zu können.

Kann mir hier zufällig jemand helfen?

MfG
Fabian


----------



## HimBromBeere (7. Feb 2012)

Kannst du nicht einfach die Sequenzen nochmal escapen? Alternativ kannst du natürlich auch über das Encoding gehen und so ein Slash z.B. Ascii-kodieren (0x5C bzw. 92)


----------



## FabianG (7. Feb 2012)

Danke für die schnelle Antwort.

Leider weiß ich nicht was du damit meinst.
Ich mache noch nicht solange Java^^

Könntest du es mir anhand einer Methode zeigen?


----------



## HimBromBeere (7. Feb 2012)

naja, wie du an deinen Drucker sendest, weiß ich nicht, aber wahrscheinlich wird´s irgendwas der Form StreamWriter#println(<Zeuch>) sein.

Nun musst du in deinem <Zeuch> alle Escape-Sequenzen (z.B. "\n") "verdoppeln" ("\\n"... das n natürlich nicht, denn das ist ja alleine kein Escape-Zeichen). 

Wie das über´s Encoding ginge, muss ich erstmal rauskramen, das war nur ´ne fixe Idee...


----------



## KrokoDiehl (7. Feb 2012)

Weißt du überhaupt schon, wie du mit dem Drucker kommunizierst? Das wäre wohl die interessanteste Frage.
Javaseitig gibt es die Printing API, die wäre deine nächste Anlaufstelle. Ich kenne davon nur die "einfache" Variante wo mal auf Graphics malt, aber ich fürchte du musst eher auf Byte-Ebene arbeiten.,.


----------



## FabianG (7. Feb 2012)

@HimBromBeere:

Ich werde mich da mal schlau lesen 

@KrokoDiehl:
Wegen der Byte-Ebene werde ich mich auch mal schlau lesen.
Generell hatte ich schon mit "printJob" erfolgreich drucken können.

Danke euch schonmal


----------



## Spacerat (7. Feb 2012)

HimBromBeere hat gesagt.:


> Nun musst du in deinem <Zeuch> alle Escape-Sequenzen (z.B. "\n") "verdoppeln" ("\\n"... das n natürlich nicht, denn das ist ja alleine kein Escape-Zeichen).


Der Versuch wird denk' ich scheitern... da wird dann nämlich "Backslash n" übertragen. Es müssten also drei Backslashes werden um auf "Backslash Steuercode" zu kommen.


----------



## FabianG (8. Feb 2012)

Also ich habe immer noch keinen Schimmer wie ich das genau mache.

Kann es mir bitte jemand anhand eines Beispiels zeigen, wie ich den Drucker, das folgende, drucken lassen kann?

Das hier ist nur ne Textdatei.


```
Es bediente Sie :\n //Font A
#Name#\n //Font A
_________________________________________\n //Font A
Nummer  Bezeichnung    SY PG zurück bis Art   Betrag\n //Font B
----------------------------------------------------\n //Font B
000660 Das Leuchten der 2 4 07.02.2012 ZUR      0,00\n //Font B
----------------------------------------------------\n //Font B
                        Summe              :    0,00\n //Font B
                        Gesamt             :    0,00\n //Font B
                        Mwst 19            :    0,00\n //Font B
                        Gegeben            :    0,00\n //Font B
```

Mein Programm liest die Txtdatei aus und druckt sie mit dem Befehl:


```
public void print(String text) {
        PrintJob auftrag = getToolkit().getPrintJob(this, "Drucken", null);
        if(auftrag != null) {
            Graphics graphik = auftrag.getGraphics();
            if (graphik != null) {
                graphik.drawString(text, 40, 70);   
                graphik.dispose();
            }
            auftrag.end();
        }
    }
```


Leider druckt er immer nur die erste Zeile aus 
Evtl. ließt er nicht die Formatierungen...


----------



## FabianG (9. Feb 2012)

Ich habe nun eine neue Frage.

Wie kann ich eine Hex Datei (test.hex) ,mit einem Javaprogramm, drucken, ohne das es die Formatierungen verliert, wie "1B 2D 02" etc. ?

Meine Idee ist, dass man mit "PrintJob auftrag = getToolkit().getPrintJob()" den Drucker aussucht.
Dann wird der Anschluss vom Drucker gespeichert und im Hintergrund wird in der Konsole: "copy /b test.hex lpt1:" eingegeben. Würde das gehen, wenn ja kann mir das jemand zeigen?

Kann man evtl. auch einfach ganze Dateien zum Drucker senden?

MfG
Fabian


----------



## Spacerat (9. Feb 2012)

Okay, nun hab' ich mal 'ne Frage... ist zu dem Drucker zufällig noch ein Handbuch vorhanden? In diesem sollten nämlich die ganzen Escapesequenzen (z.B. ESC/P, ESC/P2 für Epson-Kompatible oder PCL für HP-Drucker) stehen.
Möglicherweise ist diese veraltete Handhabe von Druckern ja niemandem mehr geläufig, zumindest liessen sich Drucker damit in verschiedene Druck-Modi schalten (Plain Text, Grafik, Hex-Modus). Die Escapesequenzen bestehen ausschliesslich aus den ASCII-Codes 0-127 und konnten als normale Bytes seriell oder Parallel an den Drucker gesendet werden. Heute ist der Druckmodus weitläufig klar, nämlich Grafik.
Es stellt sich anscheinend zumindest nicht die Frage, wie kann ich dies und jenes in Java drucken, sondern eher, wie kann ich dies mit meinem (ESC/P-) Drucker tun.


----------



## FabianG (9. Feb 2012)

Zu deiner Frage, nein es gibt kein Handbuch mehr.

Also mit meinen Konsolenbefehl kann ich die Hex Datei ohne Verlust von Formatierungen drucken.
Aber ich weiß eben nicht, wie ich den ausführen kann und ob ich davor den richtigen Anschluss auswählen kann.


----------



## VfL_Freak (9. Feb 2012)

Moin,



FabianG hat gesagt.:


> Zu deiner Frage, nein es gibt kein Handbuch mehr.



Muss auch nicht - die findet man aber ganz leicht mittels einer Suchmaschine Deines Vertrauens 

Etwa:
ESC/P ? Wikipedia
Epson Printer ESC/P2 codes

Gruß
Klaus


----------

