Impressora
Para utilizar a impressora basta chamar o método PosDigital.getInstance().getPrinter() e estão disponíveis as funções da impressora.
Exemplo:
PosDigital.getInstance().getPrinter().init();
PosDigital.getInstance().getPrinter().setGray(5);
PosDigital.getInstance().getPrinter().defineFontFormat(FontFormat.MEDIUM);
PosDigital.getInstance().getPrinter().addText(AlignMode.LEFT, "EXEMPLO DE TEXTO");
PosDigital.getInstance().getPrinter().print(new IPrinterCallbackStub() {
@Override
public void onSuccess(){
//Imprimiu o texto
}
@Override
public void onError(int cause){
//Ocorreu algum erro
}
});
PosDigital.getInstance().printer.init()
PosDigital.getInstance().printer.setGray(5)
PosDigital.getInstance().printer.defineFontFormat(FontFormat.MEDIUM)
PosDigital.getInstance().printer.addText(AlignMode.LEFT, "EXEMPLO DE TEXTO")
PosDigital.getInstance().printer.print(object: IPrinterCallbackStub() {
override fun onSuccess(){
//Imprimiu o texto
}
override fun onError(cause: int){
//Ocorreu algum erro
}
});
Descrição das funções de impressão¶
init()
Inicializa a impressora no hardware, não requer parâmetros adicionais.
setGray(int gray)
Seta escalas de cinza na impressão, requer um parâmetro INT.
defineFontFormat(int fontFormat)
Define o tamanho da fonte que vai ser impresso, requer um parâmetro INT(FontFormat.SMALL, FontFormat.MEDIUM, FontFormat.LARGE).
addText(int align, String text)
Imprime texto, mas não imprime caracteres especiais. Recebe dois(2) parâmetros, um é
o align(LEFT, CENTER ou RIGTH), e a string de texto. Máximo de caracteres por linha em
todos os terminais:
- SMALL - 48 caracteres
- MEDIUM - 32 caracteres
- LARGE - 32 caracteres
A função addText() adiciona automaticamente um "\n" no final. Se utilizar apenas um addText() para todo o comprovante, deve ser inserido manualmente o "\n" pelo programador, respeitando o limite máximo de caracteres por linha. Se este limite não for respeitado, o wordwrap default poderá causar desalinhamento no comprovante. Caso utilize addText() para inserir linhas em branco para corte de papel, recomenda-se inserir um espaço vazio, para compatibilidade(addText(AlignMode.LEFT, “ ”)).
Também deve-se respeitar o número máximo de caracteres por addText(), que é 1800 caracteres, caso este limite não seja respeitado, poderá haver problemas de não impressão de comprovantes.
addImageBitmap(int align, Bitmap bitmap)
Adiciona imagens em formato bitmap para impressão a partir da pasta Assets ou
Resource. O método possui uma limitação na largura do BMP. No máximo 378 pixels de
largura para a imagem poder ser alinhada (esquerda, direita, centralizado). Imagens com
largura maior que 378 pixels são impressas sempre centralizadas. Imagens com largura
acima de 378 pixels serão redimensionadas para 378 pixels de largura sem distorção da
imagem. Portanto é recomendado usar imagens com no máximo 378 pixels de largura.
addBarCode(int align, String barcode)
Adiciona um barcode para ser impresso, recebendo os parâmetros align(int) e
barcode(String). Para a legibilidade e qualidade do barcode, é recomendado utilizar o
número máximo de 28 caracteres, caso possua entre 28 e 60 caracteres será feito um
resize automático e será impresso com uma qualidade inferior. Se possuir mais de 60
caracteres, poderá não ser impresso.
addQrCode(int align, int imageheight, String qrcode)
Adiciona um QrCode para ser impresso, recebendo os parâmetros align(int), altura em
pixels(int) e qrCode(String). Para a legibilidade e qualidade do QrCode, é recomendado
uma altura em pixels de no mínimo 140, e máximo 300. Fora deste range, será feito
um resize automático do QrCode para os valores citados acima.
addImageByteArray() [DEPRECATED]
Adiciona imagens em formato byteArray para impressão a partir da pasta Assets ou
Resource. A função está descontinuada, e não deverá mais ser utilizada.
print(in IPrinterCallback callback)
Realiza a impressão, requer parâmetro getPrinterCallBack().
printAndRemovePaper(in IPrinterCallback callback)
Realiza a impressão com um espaçamento no final para o texto visível sair da
impressora, permitindo seu corte. Requer parâmetro getPrinterCallBack().
getStatus() – Retorna um int com o status da impressão.
IMPORTANTE:
Sempre agrupe as informações no comprovante antes de mandar imprimir, ou seja, chame o método “print” após todo o comprovante já estar pronto. Sempre que chamar o método “print”, aguarde os eventos de call-back antes de chamar outro método “print”.
O tratamento de erros da impressão pode ser feito com o auxílio das constantes da classe PrinterStatus.
PrinterStatus.OK -> "OK"
PrinterStatus.PRINTING -> "Imprimindo"
PrinterStatus.ERROR_NOT_INIT -> "Impressora não iniciada”
PrinterStatus.ERROR_OVERHEAT -> "Impressora superaquecida”
PrinterStatus.ERROR_BUFOVERFLOW -> "Fila de impressão muito grande”
PrinterStatus.ERROR_PARAM -> "Parâmetros incorretos”
PrinterStatus.ERROR_LIFTHEAD -> "Porta da impressora aberta"
PrinterStatus.ERROR_LOWTEMP -> "Temperatura baixa demais para impressão"
PrinterStatus.ERROR_LOWVOL -> "Sem bateria suficiente para impressão"
PrinterStatus.ERROR_MOTORERR -> "Motor de passo com problemas"
PrinterStatus.ERROR_NO_PAPER -> "Sem bobina"
PrinterStatus.ERROR_PAPERENDING -> "Bobina acabando"
PrinterStatus.ERROR_PAPERJAM -> "Bobina travada"
PrinterStatus.UNKNOW -> "Não foi possível definir o erro"
public class PrinterStatus {
OK = 0;
PRINTING = 1;
ERROR_NOT_INIT = 2;
ERROR_OVERHEAT = 3;
ERROR_BUFOVERFLOW = 4;
ERROR_PARAM = 5;
ERROR_LIFTHEAD = 10;
ERROR_LOWTEMP = 11;
ERROR_LOWVOL = 12;
ERROR_MOTORERR = 13;
ERROR_NO_PAPER = 15;
ERROR_PAPERENDING = 16;
ERROR_PAPERJAM = 17;
UNKNOW = 1000;
}
Dica de impressão¶
Para imprimir com acentos e caracteres especiais, é bom criar um .xml no seu código, com o esqueleto da impressão, populá-lo, e após utilizar a função de converter para Bitmap, como no exemplo abaixo:
val view = layoutInflater.inflate(R.layout.slip, null)
PosDigital.getInstance().getPrinter().addImageBitmap(AlignMode.CENTER, ViewUtils.convertToBitmap(view))
Exemplo de XML¶
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="378px"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
style="@style/TextAppearance.Slip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginStart="22dp"
android:text="Posto de Combustível XYZ" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
style="@style/TextAppearance.Slip.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginStart="37dp"
android:text="CNPJ: 00.666.000/0001.66" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
style="@style/TextAppearance.Slip.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginStart="25dp"
android:text="MASTER/VISA/AMEX/ELO" />
</RelativeLayout>
<android.support.v7.widget.AppCompatTextView
style="@style/TextAppearance.Slip.Medium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="DEBITO/CREDITO PARCELADO/A VISTA"
android:textAlignment="center" />
<android.support.v7.widget.AppCompatTextView
style="@style/TextAppearance.Slip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="R$ 12,34"
android:textAlignment="center" />
</LinearLayout>