Ir para o conteúdo

Impresión a través del SDK

A través del SDK, es posible solicitar al terminal el uso e impresión de información mediante una cadena de texto o contenido en formato Base64 de un bitmap.

Para ello, se proporciona la biblioteca payments-api-x.x.x.x.aar, que contiene las funciones necesarias para tales aplicaciones.

Flujo

Flujo de Pago

Pasos Éxito Error
1. Solicitud de impresión La impresión se realizó correctamente. La impresión no se realizó y la razón se encuentra en la respuesta.
2. Respuesta de la solicitud de impresión Una vez impreso, no hay información adicional sobre la impresión. La respuesta contiene información sobre el problema que impidió la impresión.

Permisos

Para utilizar las funcionalidades dispuestas en la implementación, es necesario incluir el permiso a continuación.

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

Métodos

Firma Descripción
void printFromString(Context context, String stringContent, PaymentCallback callback) Solicita la impresión de un texto a partir de una cadena (String).
void printFromBase64(Context context, String base64Content, PaymentCallback callback) Solicita la impresión de una imagen a partir de un Base64 enviado como una cadena.

printFromString()

Cuando es necesario imprimir un contenido sin formato textual, se puede utilizar el método printFromString().

Parámetros

Nombre Tipo Obligatorio Descripción
context Context El contexto de la aplicación que solicita el uso de la función de impresión.
stringContent String El contenido en formato de String a imprimir.
printFeed Boolean Si el parámetro es igual a true, al final de la impresión del comprobante tendrá un espacio. Si es false, no habrá espacio al final de la impresión del comprobante.
callback PaymentCallback Interfaz que se ejecutará para notificaciones de éxito o error del proceso.

Al imprimir una String no hay límite en el número de caracteres por línea, ya que el terminal se ajusta automáticamente al contenido. Sin embargo, no se recomienda incluir una gran cantidad de caracteres sin realizar saltos de línea.

Warning

Cuando hay una larga secuencia de caracteres consecutivos sin un salto de línea, la salida se ajustará automáticamente y se insertará un salto de línea cada 500 caracteres si no hay espacios entre ellos.

printFromBase64()

Cuando se necesita imprimir una imagen, se puede utilizar el método printFromBase64(). Este método requiere que la imagen se convierta previamente a un formato Base64 válido antes de pasarla a imprimir.

Nombre Tipo Obligatorio Descripción
context Context El contexto de la aplicación que solicita la impresión.
base64Content String El contenido visual a imprimir en formato Base64.
printFeed Boolean Si el parámetro es igual a true, al final de la impresión del comprobante tendrá un espacio. Si es false, no habrá espacio al final de la impresión del comprobante.
callback PaymentCallback Interfaz que se ejecutará para notificaciones de éxito o error del proceso.

Se considera un Base64 válido aquel que puede convertirse en uno de los siguientes formatos de imagen:

1 canal por píxel 3 canales por píxel 4 canales por píxel
Una imagen donde cada píxel contiene solo 1 canal (Alfa) (ALPHA_8). Una imagen donde cada píxel contiene 3 canales (Rojo, Verde y Azul) (RGB_565). Una imagen donde cada píxel contiene 4 canales (Alfa, Rojo, Verde y Azul) (ARGB_8888 o ARGB_4444).

Ejemplo

public class MyActivity extends Activity implements PaymentClient.PaymentCallback {

  private static final String TAG = "impresion_recibo";
  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 = "Este es un ejemplo de impresión de texto.\n"
      + "Tenga en cuenta que después de '\n' habrá un salto de línea en el recibo.\n"
      + "También note que la impresión se ajustará a la cantidad de caracteres "
      + "y a la capacidad de impresión de caracteres en una sola línea.";

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

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

    try {
      paymentClient.printFromBase64(getApplicationContext(), base64, true, this);
    } catch (ClientException e) {
      Log.e(TAG, "Error al imprimir imagen Base64", e);
    }
  }

  @Override
  public void onError(ErrorData errorData) {
    Log.e(TAG, "Ocurrió el siguiente error: " + errorData.getResponseMessage());
  }

  @Override
  public void onSuccess(Object o) {
    Log.i(TAG, "¡El recibo se imprimió con éxito!");
  }
}