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?
Antwort
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
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.
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
Build.MANUFACTURER ist wieder Android-Geräte Herstellung Recht? Wie kann ich ESC-Befehle verwenden? Wie schreibe ich es auf einen OutPutStream? –
fast jeder Hersteller folgende ESC Standard für ihre Drucker, aber wie kann man es verwenden? –
- 1. Verwenden Sie GCM/Firebase ohne Clientside SDK
- 2. Verwenden Sie Dagger2 ohne Android
- 3. Wie Android SDK-Add-ons verwenden?
- 4. Scala wie Standardeinstellungen zu verwenden, ohne sie
- 5. Xcode, wie Standard-SDK zu entfernen, nicht SDK verwenden, verwenden Sie eigene Header
- 6. Affdex Android SDK - Speichern und verwenden CameraDetector
- 7. Verwenden Sie System.load auf Android?
- 8. Android SDK-Klassen in Komponententests verwenden
- 9. Verwenden von Facebook Android SDK aus Service
- 10. wie Awesomium SDK in Linux zu verwenden
- 11. Verwenden von Cognito JavaScript SDK ohne AWS-SDK
- 12. Verwenden Sie Facebook sdk ShareContent in Share Intent Android
- 13. Wie kann ich Song-Metadaten abrufen, ohne playUri mit dem Android SDK zu verwenden?
- 14. Verwenden von ProGuard OHNE Android Studio
- 15. Verwenden Sie Filehelper ohne Excel zu installieren
- 16. So verwenden Sie die Android SDK-Dokumentation offline
- 17. Verwenden Sie Standard-JDK von Android SDK für andere Zwecke
- 18. Verwenden Sie Django-Summernote ohne Formular zu verwenden?
- 19. Verwenden Sie Google Maps auf allen Geräten. (ohne Google Play)
- 20. Wie Android Android SDK von Android-Studio in Xamarin zu verwenden
- 21. Verwenden Sie ModalPopupExtender, ohne TargetControlID zu setzen?
- 22. Verwenden Sie das Klassenobjekt als Zeichenfolge, ohne str() zu verwenden
- 23. Titan USB Thermodrucker Treiber
- 24. Android: Wie man com.google.android.gms.maps.MapView implementiert, ohne eine Kartenaktivität zu verwenden
- 25. Wie kann ich QOpenGLWidget auf Android verwenden?
- 26. Wie py.test Fixtures zu verwenden, ohne sie zu importieren
- 27. So verwenden Sie iPhone SDK Private APIs
- 28. Verwenden Sie Jenkins ohne Versionskontrollsysteme
- 29. Wie baue ich ein Android SDK um Bibliotheken in sdk/add-ons verwenden zu können
- 30. Verwenden Sie Maven-Projekt in Android-Anwendung
können Sie Thermodrucker verwenden [have_look] (https://github.com/imrankst1221/Thermal-Printer-in-Android) –
Aber es unterstützt nur Bluetooth richtig? Ich brauche USB oder Ethernet ... :( –
Ich denke, du brauchst immer noch Vendor SDK, nur Hersteller wissen, wie I2C-Kommunikationsverbindung mit ihrer Hardware für USB/Ethernet – YinKiet