2017-11-28 6 views
4

Ich habe bereits EPSON SDK (für Bluetooth) implementiert und funktioniert gut, aber nicht auf anderen Druckern arbeiten, gibt es einen allgemeinen Weg, um es zu erreichen. Was ist ESC Befehl, wie es funktioniert ?,Wie verwenden Sie Thermodrucker (USB/Ethernet) auf Android, ohne Vendor SDK zu verwenden?

+1

können Sie Thermodrucker verwenden [have_look] (https://github.com/imrankst1221/Thermal-Printer-in-Android) –

+0

Aber es unterstützt nur Bluetooth richtig? Ich brauche USB oder Ethernet ... :( –

+0

Ich denke, du brauchst immer noch Vendor SDK, nur Hersteller wissen, wie I2C-Kommunikationsverbindung mit ihrer Hardware für USB/Ethernet – YinKiet

Antwort

2

Finden Sie this eins.Es hilft Ihr Problem. Die ESC/POS-Befehlsreferenz enthält detaillierte Informationen zu ESC/POS-Befehlen, z. B. Standardbefehlssyntax und Protokoll. Es richtet sich an Programmierer, die den Drucker mit ESC/POS-Befehlen steuern möchten.

Die ESC/POS-Befehlsreferenz wird als Ersatz für ESC/POS APG für Papierrollendrucker bereitgestellt. Der ESC/POS-APG für Papierrollendrucker wird daher nicht mehr überarbeitet. Die ESC/POS-Befehlsreferenz enthält die Befehlsinformationen für Standardmodelle wie das ANK-Modell oder das japanische Modell und kann chinesische oder südasiatische Modelle enthalten. Die anderen Modelle, z. B. angepasst, unterstützen möglicherweise verschiedene Befehle oder haben einen anderen Bereich oder einen anderen Standardwert für die Befehlsparameter. Bitte beachten Sie jede Produktspezifikation für sie.

Verwenden Sie den folgenden Code
Hinweis: Sie können Output Objekt verwenden Drucker zu schreiben, egal Bluetooth oder Ethernet oder Wi-Fi

public class PrinterConstants { 
public static int PORT=9100,TOTAL_CHAR=45,DIV1=10,DIV2=5,DIV3=10,DIV4=10,DIV5=10; 
public static String IP="192.168.1.35"; 
private OutputStream printer; 
public static final String UUID="00001101-0000-1000-8000-00805f9b34fb"; 
public PrinterConstants(OutputStream printer){ 
    this.printer=printer; 
} 

public void printString(String str) throws IOException { 
    Log.i("PRINTER_PRE",str); 
    printer.write(str.getBytes()); 
    printer.write(0xA); 
    printer.flush(); 
} 
public void storeString(String str) throws IOException { 
    printer.write(str.getBytes()); 

    printer.flush(); 
} 
public void printStorage() throws IOException { 
    printer.write(0xA); 

    printer.flush(); 
} 
public void feed(int feed) throws IOException { 
    //escInit(); 
    printer.write(0x1B); 
    printer.write("d".getBytes()); 
    printer.write(feed);printer.flush(); 

} 
public void printAndFeed(String str, int feed) throws IOException { 
    //escInit(); 
    printer.write(str.getBytes()); 
    printer.write(0x1B); 
    printer.write("d".getBytes()); 
    printer.write(feed);printer.flush(); 

} 
public void setBold(Boolean bool) throws IOException { 
    printer.write(0x1B); 
    printer.write("E".getBytes()); 
    printer.write((int)(bool?1:0));printer.flush(); 
} 
/** 
* Sets white on black printing 
* */ 
public void setInverse(Boolean bool) throws IOException { 
    bool=false; 
    printer.write(0x1D); 
    printer.write("B".getBytes()); 
    printer.write((int)(bool?1:0));printer.flush(); 

} 
public void resetToDefault() throws IOException { 
    setInverse(false); 
    setBold(false); 
    setUnderline(0); 
    setJustification(0);printer.flush(); 
} 
/** 
* Sets underline and weight 
* 
* @param val 
*  0 = no underline. 
*  1 = single weight underline. 
*  2 = double weight underline. 
* */ 
public void setUnderline(int val) throws IOException { 
    printer.write(0x1B); 
    printer.write("-".getBytes()); 
    printer.write(val);printer.flush(); 
} 
/** 
* Sets left, center, right justification 
* 
* @param val 
*  0 = left justify. 
*  1 = center justify. 
*  2 = right justify. 
* */ 

public void setJustification(int val) throws IOException { 
    printer.write(0x1B); 
    printer.write("a".getBytes()); 
    printer.write(val); 
    printer.flush(); 
} 
public void setLeftRight(String left,String right) throws IOException { 
    printer.write(0x1B); 
    printer.write("a".getBytes()); 
    printer.write(0); 
    printString(left); 

    printer.write(0x1B); 
    printer.write("a".getBytes()); 
    printer.write(2); 
    printString(right); 

    printer.flush(); 
} 
public void printBarcode(String code, int type, int h, int w, int font, int pos) throws IOException { 

    //need to test for errors in length of code 
    //also control for input type=0-6 

    //GS H = HRI position 
    printer.write(0x1D); 
    printer.write("H".getBytes()); 
    printer.write(pos); //0=no print, 1=above, 2=below, 3=above & below 

    //GS f = set barcode characters 
    printer.write(0x1D); 
    printer.write("f".getBytes()); 
    printer.write(font); 

    //GS h = sets barcode height 
    printer.write(0x1D); 
    printer.write("h".getBytes()); 
    printer.write(h); 

    //GS w = sets barcode width 
    printer.write(0x1D); 
    printer.write("w".getBytes()); 
    printer.write(w);//module = 1-6 

    //GS k 
    printer.write(0x1D); //GS 
    printer.write("k".getBytes()); //k 
    printer.write(type);//m = barcode type 0-6 
    printer.write(code.length()); //length of encoded string 
    printer.write(code.getBytes());//d1-dk 
    printer.write(0);//print barcode 

    printer.flush(); 
} 

public void beep() throws IOException { 
    printer.write(0x1B); 
    printer.write("(A".getBytes()); 
    printer.write(4); 
    printer.write(0); 
    printer.write(48); 
    printer.write(55); 
    printer.write(3); 
    printer.write(15);printer.flush(); 
} 

public void setLineSpacing(int spacing) throws IOException { 

    //function ESC 3 
    printer.write(0x1B); 
    printer.write("3".getBytes()); 
    printer.write(spacing); 

} 
public void cut() throws IOException { 
    printer.write(0x1D); 
    printer.write("V".getBytes()); 
    printer.write(48); 
    printer.write(0);printer.flush(); 
} 
} 

von oben Sie verwenden können ESC/POS-Befehle an Ausgangsstrom direkt schreiben

0

Sie haben eine Implementierung für einige verschiedene Varianten von Druckern finden und erstellen, die meisten sind kompatibel mit anderen, so wird es nicht so schwer sein (plus Sie werden die Verkäufer SDKs kopieren).

Dann eine Schnittstelle erstellen, die sowohl Implementierung wie initialize verwenden, Scannen, printtext, Drucken, printBarCode

das Gerät lesen, wie so ...

static String getDeviceName() { 
     String manufacturer = Build.MANUFACTURER; 
     String model = Build.MODEL; 
     if (model.startsWith(manufacturer)) { 
      return capitalize(model); 
     } else { 
      return capitalize(manufacturer) + " " + model; 
     } 
    } 

Und die Ergebnisse verwenden, um zu bestimmen, welche Implementierung zu verwenden, bevor sie auf den Standard geht, der auf den meisten Geräten funktioniert. Ein Interface wird Sie bald vergessen lassen.

ein ESC Befehl, wird nur ein Befehl an den Drucker, diese an die meisten Geräte fast identisch sind ... sie eine neue Zeile beginnen verwendet werden, richten Sie Text, fett etc .. von ihnen denken, wie HTML-Markups (stark, h1, Mitte), weil Sie sie mit Text mischen, den Sie drucken wollen, so dass es super einfach ist, cool aussehende Drucke zu erstellen.

+0

Wie für glaubwürdige und/oder offizielle Quellen ... das letzte Mal habe ich überprüft Thermodruck von Android war nicht standardisiert .. Nun zumindest keine Herstellung folgt jedem Standard – konzo

+0

Build.MANUFACTURER ist wieder Android-Geräte Herstellung Recht? Wie kann ich ESC-Befehle verwenden? Wie schreibe ich es auf einen OutPutStream? –

+0

fast jeder Hersteller folgende ESC Standard für ihre Drucker, aber wie kann man es verwenden? –

Verwandte Themen