Ir para o conteúdo

Imprimindo Via SDK

Através do SDK é possível solicitar ao terminal o uso e impressão de informações através de String ou conteúdo no formato de Base64 de um bitmap.

Para isso, é fornecida a biblioteca payments-api-x.x.x.x.aar, que contém as funções necessárias para tal aplicações.

Fluxo

Fluxo de Pagamento

Passos Sucesso Erro
1. Solicitação de impressão A impressão foi realizada. A impressão não foi realizada e a razão para isto está contida na resposta.
2. Resposta da solicitação de impressão Uma vez impresso, não há informações adicionais a respeito da impressão. A resposta contém informações do problema que impediu a impressão.

Permissões

Para utilizar as funcionalidades dispostas na implementação faz-se necessário incluir a permissão abaixo.

<uses-permission android:name="br.com.android.payments.print.provider.READ_PERMISSION" />

Métodos

Assinatura Descrição
void printFromString(Context context, String stringContent, PaymentCallback callback) Solicita a impressão de uma de um texto comum a partir de uma String.
void printFromBase64(Context context, String base64Content, PaymentCallback callback) Solicita a impressão de uma imagem a partir de um Base64 enviado através de uma String.

printFromString()

Quando há a necessidade de imprimir um conteúdo no formato textual, o método printFromString() pode ser utilizado.

Parâmetros

Nome Tipo Obrigatório Descrição
context Context Sim O contexto da aplicação que solicita o uso da função de impressão.
stringContent String Sim O conteúdo no formato de string a ser impresso.
printFeed Boolean Sim Caso o parâmetro for igual a true, ao final da impressão do comprovante terá um espaçamento. Caso for false, não terá espaçamento ao final da impressão do comprovante
callback PaymentCallback Sim Interface que será executada para notificações de sucesso ou erro do processo de estorno.

Ao imprimir uma string não há um limite de caracteres por linha, pois o terminal se ajusta automaticamente ao conteúdo. Contudo, não é recomendado incluir uma grande quantidade de caracteres sem realizar quebras de linha.

Warning

Quando há uma grande sequência de caracteres seguidos sem quebra de linha, a impressão será ajustada automaticamente e uma quebra de linha será inserida a cada 500 caracteres sem espaços entre si.

printFromBase64()

Quando a necessidade é imprimir uma imagem, o método printFromBase64() pode ser utilizado. Esse método requer que a imagem esteja previamente convertida para um formato Base64 válido antes de ser passada para a impressão.

Nome Tipo Obrigatório Descrição
context Context Sim O contexto da aplicação que solicita o uso da função de impressão.
base64Content String Sim O conteúdo visual a ser impresso no formato Base64.
printFeed Boolean Sim Caso o parâmetro for igual a true, ao final da impressão do comprovante terá um espaçamento. Caso for false, não terá espaçamento ao final da impressão do comprovante
callback PaymentCallback Sim Interface que será executada para notificações de sucesso ou erro do processo de estorno.

Considera-se um Base64 válido um Base64 que pode ser convertido para um dos seguintes formatos de imagem:

1 canal por pixel 3 canais por pixel 4 canais por pixel
Imagem cujo cada pixel contém apenas 1 canal (Alpha) (ALPHA_8). Imagem cujo cada pixel contém 3 canais (Vermelho, Verde e Azul) (RGB_565). Imagem cujo cada pixel contém 4 canais (Alpha, Vermelho, Verde e Azul) (ARGB_8888 ou ARGB_4444).

Exemplo

public class MyActivity extends Activity implements PaymentClient.PaymentCallback {

  private static final String TAG = "impressao_comprovante";
  private PaymentClient paymentClient;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_payment);

    paymentClient = new PaymentClientImpl();
  }

  @Override
  protected void onResume() {
    super.onResume();
    paymentClient.bind(this);
  }

  @Override
  protected void onDestroy() {
    try {
      paymentClient.unbind(this);
    } catch (Exception e) {
      Log.e(TAG, e.getMessage());
    }
    super.onDestroy();
  }


  public void printText(View view) {
    String text = "Esse é um exemplo de impressão de texto.\n"
      + "Observe que após o '\n' haverá a quebra de linha no comprovante.\n"
      + "Observe também que a impressão se ajustará na quantidade de caracteres "
      + "e capacidade de impressão de caracteres em uma única linha.";

    try {
      paymentClient.printFromString(getApplicationContext(), text, true, this);
    } catch (ClientException e) {
      Log.e(TAG, "Erro ao imprimir texto", e);
    }
  }

  public void printBase64(View view) {
    String base64 = "iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAARSURBVBhXY3growJEYEpGBQAkHgS13mWMCAAAAABJRU5ErkJggg==";

    try {
      paymentClient.printFromBase64(getApplicationContext(), base64, true, this);
    } catch (ClientException e) {
      Log.e(TAG, "Erro ao imprimir imagem Base64", e);
    }
  }

  @Override
  public void onError(ErrorData errorData) {
    //Trate o erro recebido aqui, em observância que 
    Log.e(TAG, "Houve o seguinte erro: " + errorData.getResponseMessage());
  }

  @Override
  public void onSuccess(Object o) {
    Log.i(TAG, "O comprovante foi impresso com sucesso!");
  }
}