wake-up-neo.net

Wie verwende ich einen Thermodrucker (USB/Ethernet) unter Android, ohne das SDK des Herstellers zu verwenden?

Ich habe EPSON SDK (für Bluetooth) bereits implementiert und es funktioniert einwandfrei, aber auf anderen Druckern funktioniert es nicht. Was ist der ESC-Befehl? Wie funktioniert er?

5
Anu Martin

this one.Es hilft bei Ihrem Problem. Die ESC/POS-Befehlsreferenz enthält detaillierte Informationen zu ESC/POS-Befehlen, wie z. B. Standardbefehlssyntax und -protokoll. Sie 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. Das ESC/POS-APG für Papierrollendrucker wird daher nicht mehr überarbeitet. Die ESC/POS-Befehlsreferenz enthält Befehlsinformationen für Standardmodelle wie ANK-Modelle oder japanische Modelle und kann chinesische oder South-Modelle enthalten Asia-Modelle. Die anderen, z. B. benutzerdefinierten Modelle unterstützen möglicherweise andere Befehle oder haben einen anderen Bereich oder einen anderen Standardwert für Befehlsparameter. Bitte beachten Sie die jeweiligen Produktspezifikationen.

Verwenden Sie den folgenden Code
Hinweis: Sie können das OutPutStream-Objekt verwenden, um Drucker zu schreiben, unabhängig von Bluetooth, Ethernet oder WLAN 

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();
}
}

wenn Sie oben verwenden, können Sie ESC/POS-Befehle schreiben, um den Stream direkt auszugeben 

6
NITHIN VARGHESE

Sie haben eine Implementierung für einige verschiedene Druckervarianten gefunden und erstellt. Die meisten sind mit anderen kompatibel, so dass es nicht so schwer ist (und Sie werden die Hersteller-SDKs kopieren).

Erstellen Sie dann eine Schnittstelle, die von beiden Implementierungen verwendet wird, z. B. initialisieren, scannen, printText, printImage, printBarCode

Lesen Sie das Gerät gerne so ...

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

Verwenden Sie die Ergebnisse, um zu ermitteln, welche Implementierung verwendet werden soll, bevor Sie auf die Implementierung zurückgreifen, die auf den meisten Geräten funktioniert. Ein Interface lässt Sie den Ärger, den Sie durchgemacht haben, bald vergessen.

ein ESC-Befehl ist nur eine Anweisung an den Drucker. Diese sind fast identisch mit den meisten Geräten ... Sie werden verwendet, um eine neue Zeile zu beginnen, Text auszurichten, fett hervorzuheben. Denken Sie an Sie mögen HTML-Markierungen (stark, h1, zentriert), weil Sie sie mit dem Text mischen, den Sie drucken möchten, was die Erstellung cooler Drucke sehr einfach macht. 

1
konzo