Я использую Bematech MP-4200-TH и пытаюсь печатать с использованием ESC / Bema и USB-порта. Принтер настроен как команды «ESC / Bema». Я пытаюсь это:
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintServiceAttributeSet;
import javax.print.attribute.standard.PrinterName;
/**
*
* @author Felipe
*/
public class PrinterTest {
public static StringBuilder conteudo = new StringBuilder();
public static final char[] BEMA_MODE = new char[]{0x1D, 0xF9, 0x20, 0x0};
public static final char[] START = new char[]{0x1B, '@'};
public static final char[] CUT = new char[]{0x1B, 'm'};
public static final char[] START_BOLD = new char[]{0x1B, 0x45};
public static final char[] END_BOLD = new char[]{0x1B, 0x46};
public static final char[] START_ITALIC = new char[]{0x1B, 0x34};
public static final char[] END_ITALIC = new char[]{0x1B, 0x35};
public static final byte[] CHAR_SIZE_2 = {0x1B, 0x21, 0x30};
public static void main(String[] args) throws Exception {
addText(new String(START_ITALIC) + "An italic text" + new String(END_ITALIC));
addText(new String(START_BOLD) + "Acentuação" + new String(END_BOLD));
addText("\n\n\n\n\n\n\n\n\n");
addCommand(CUT);
printBytes(conteudo.toString(), "MP-4200 TH");
}
public static void addCommand(char[] comando) {
conteudo.append(new String(comando)).append(System.lineSeparator());
}
public static void addText(String texto) {
conteudo.append(texto).append(System.lineSeparator());
}
private static void printBytes(String s, String printerName) throws Exception {
byte[] bys = s.getBytes("UTF-8");
DocFlavor df = DocFlavor.INPUT_STREAM.AUTOSENSE;
InputStream pis = new ByteArrayInputStream(bys);
HashPrintServiceAttributeSet aset = new HashPrintServiceAttributeSet();
PrinterName printer = new PrinterName(printerName, null);
aset.add(printer);
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, aset);
Doc d = new SimpleDoc(pis, df, null);
if (services[0] != null) {
DocPrintJob job = services[0].createPrintJob();
try {
job.print(d, null);
} catch (PrintException e) {
e.printStackTrace();
}
}
}
}
У меня 2 проблемы: с форматированием текста и с акцентуацией (с португальского). Бематех печатает это:
4An italic text5
centuaçãoF
что я делаю не так? Если кто-нибудь знает другой, более простой способ печати, пожалуйста, дайте мне знать. Я пытался изменить режим печати на ES C / POS, но ничего не получилось. Я знаю, что могу печатать с помощью объекта Printable, но я понимаю, что при печати нескольких документов принтеру требуется много времени.