예제 #1
0
  public static String generarCotizacionPDF(
      Activity activity, Comprobante comprobante, String vence) {

    SharedPreferences settings =
        PreferenceManager.getDefaultSharedPreferences(activity.getApplicationContext());
    String pictureData = settings.getString(activity.getString(R.string.image_preference), "");

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    String fecha = sdf.format(comprobante.getFecha());

    PDFWriter mPDFWriter = new PDFWriter(PaperSize.A4_WIDTH, PaperSize.A4_HEIGHT);

    int headeLeft = 250;
    if (pictureData != null && pictureData.length() > 0) {
      byte[] b = Base64.decode(pictureData, Base64.DEFAULT);
      Bitmap logo = BitmapFactory.decodeByteArray(b, 0, b.length);
      mPDFWriter.addImage(30, 30, 210, 100, logo);
    } else {
      headeLeft = 30;
    }

    /*
     * Datos Emisor
     */
    int topImpuestos = 30;
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.setColor(98, 99, 102);
    int altoNombre =
        mPDFWriter.addTextMultiline(
            headeLeft, topImpuestos, 9, 30, comprobante.getEmisor().getNombre());
    topImpuestos += altoNombre - 10;
    // mPDFWriter.addText(headeLeft, topImpuestos, 8, comprobante.getEmisor().getNombre());
    if (comprobante.getEmisor().getDomicilioFiscal() != null) {
      mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA);
      if (comprobante.getEmisor().getDomicilioFiscal().getCalle() != null
          && comprobante.getEmisor().getDomicilioFiscal().getCalle().length() > 0) {
        mPDFWriter.addText(
            headeLeft,
            topImpuestos + 10,
            8,
            comprobante.getEmisor().getDomicilioFiscal().getCalle()
                + " #"
                + comprobante.getEmisor().getDomicilioFiscal().getNoExterior());
        topImpuestos += 10;
      }
      if (comprobante.getEmisor().getDomicilioFiscal().getColonia() != null
          && comprobante.getEmisor().getDomicilioFiscal().getColonia().length() > 0) {
        mPDFWriter.addText(
            headeLeft,
            topImpuestos + 10,
            8,
            "COL. "
                + comprobante.getEmisor().getDomicilioFiscal().getColonia()
                + " | C.P. "
                + comprobante.getEmisor().getDomicilioFiscal().getCodigoPostal());
        topImpuestos += 10;
      }
      if (comprobante.getEmisor().getDomicilioFiscal().getEstado() != null
          && comprobante.getEmisor().getDomicilioFiscal().getEstado().length() > 0) {
        mPDFWriter.addText(
            headeLeft,
            topImpuestos + 10,
            8,
            comprobante.getEmisor().getDomicilioFiscal().getEstado()
                + ", "
                + comprobante.getEmisor().getDomicilioFiscal().getEstado()
                + ", "
                + comprobante.getEmisor().getDomicilioFiscal().getPais());
        topImpuestos += 10;
      }
    }
    mPDFWriter.addText(
        headeLeft, topImpuestos + 10, 8, "R.F.C. " + comprobante.getEmisor().getRfc());
    topImpuestos += 10;
    mPDFWriter.addText(headeLeft, topImpuestos + 10, 8, "FECHA " + fecha);

    /*
     *Folio
     */
    if (comprobante.getTipoDeComprobante() != null
        && comprobante.getTipoDeComprobante().length() > 0) {
      mPDFWriter.addImage(250 + 175, 30, 145, 30, getRectBitmap(145, 45, 0xFFEEF1D7));
      mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA);
      mPDFWriter.setColor(156, 179, 39);
      mPDFWriter.addText(250 + 220, 37, 13, comprobante.getTipoDeComprobante().toUpperCase());
    }

    if (comprobante.getFolio() != null && comprobante.getFolio().length() > 0) {
      mPDFWriter.setColor(238, 241, 215);
      mPDFWriter.addRectangle(250 + 176, 60, 143, 30);
      mPDFWriter.setColor(238, 49, 36);
      mPDFWriter.addText(250 + 200, 60, 36, comprobante.getFolio());
    }
    /*
     * Datos Receptor
     */
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA);
    mPDFWriter.setColor(98, 99, 102);
    mPDFWriter.addText(30, 145, 12, "DIRIGIDO A");
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(30, 158, 9, comprobante.getReceptor().getNombre());

    mPDFWriter.addText(
        250, 120, 32, "MX$" + comprobante.getTotal().setScale(2, RoundingMode.CEILING));
    if (vence.length() > 0) {
      mPDFWriter.addText(252, 155, 9, "VALIDO HASTA " + vence.toUpperCase());
    }

    /*
     * Conceptos
     */
    topImpuestos = 180;

    mPDFWriter.addImage(30, topImpuestos, 540, 18, getRectBitmap(540, 18, 0xFF000000));
    mPDFWriter.setColor(255, 255, 255);
    mPDFWriter.addText(40, topImpuestos + 3, 9, "CANTIDAD");
    mPDFWriter.addText(100, topImpuestos + 3, 9, "UNIDAD");
    mPDFWriter.addText(180, topImpuestos + 3, 9, "CONCEPTO");
    mPDFWriter.addText(500, topImpuestos + 3, 9, "IMPORTE");
    mPDFWriter.setColor(0, 0, 0);
    int inicio = topImpuestos + 20;
    int sumatoria = 17;
    int index = 0;
    for (Comprobante.Conceptos.Concepto concepto : comprobante.getConceptos().getConcepto()) {
      int posicionY = inicio + (sumatoria * index);
      mPDFWriter.addText(
          40,
          posicionY,
          9,
          String.valueOf(concepto.getCantidad().setScale(2, RoundingMode.CEILING)));
      mPDFWriter.addText(100, posicionY, 9, concepto.getUnidad());
      mPDFWriter.addText(180, posicionY, 9, concepto.getDescripcion());
      mPDFWriter.addText(
          500,
          posicionY,
          9,
          "$" + String.valueOf(concepto.getImporte().setScale(2, RoundingMode.CEILING)));
      index++;
    }

    topImpuestos = 700;
    int leftImpuestos = 30 + 120 + 237;

    /*
     * Total, impuestos...
     */

    mPDFWriter.addImage(30, topImpuestos, 450, 18, getRectBitmap(450, 18, 0xFFEEF1D7));
    mPDFWriter.setColor(156, 179, 39);
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.addText(leftImpuestos + 5, topImpuestos + 3, 9, "SUBTOTAL");
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA);
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(
        leftImpuestos + 100,
        topImpuestos + 3,
        10,
        "$" + String.valueOf(comprobante.getSubTotal().setScale(2, RoundingMode.CEILING)));
    topImpuestos += 18;

    mPDFWriter.addImage(30, topImpuestos, 450, 18, getRectBitmap(450, 18, 0xFFDCDDDE));
    mPDFWriter.setColor(148, 150, 153);
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.addText(
        leftImpuestos + 5,
        topImpuestos + 3,
        9,
        "IVA " + comprobante.getImpuestos().getTraslados().getTraslado().get(0).getTasa() + "%");
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(
        leftImpuestos + 100,
        topImpuestos + 3,
        10,
        "$"
            + String.valueOf(
                comprobante
                    .getImpuestos()
                    .getTraslados()
                    .getTraslado()
                    .get(0)
                    .getImporte()
                    .setScale(2, RoundingMode.CEILING)));
    topImpuestos += 18;

    mPDFWriter.addImage(30, topImpuestos, 450, 18, getRectBitmap(450, 18, 0xFFDCDDDE));
    mPDFWriter.setColor(148, 150, 153);
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.addText(
        leftImpuestos + 5,
        topImpuestos + 3,
        9,
        "IEPS " + comprobante.getImpuestos().getTraslados().getTraslado().get(1).getTasa() + "%");
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(
        leftImpuestos + 100,
        topImpuestos + 3,
        10,
        "$"
            + String.valueOf(
                comprobante
                    .getImpuestos()
                    .getTraslados()
                    .getTraslado()
                    .get(1)
                    .getImporte()
                    .setScale(2, RoundingMode.CEILING)));
    topImpuestos += 18;

    mPDFWriter.addImage(30, topImpuestos, 450, 18, getRectBitmap(450, 18, 0xFF949699));
    mPDFWriter.setColor(255, 255, 255);
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.addText(leftImpuestos + 5, topImpuestos + 3, 9, "IVA RETENIDO");
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(
        leftImpuestos + 100,
        topImpuestos + 3,
        10,
        "$"
            + String.valueOf(
                comprobante
                    .getImpuestos()
                    .getRetenciones()
                    .getRetencion()
                    .get(0)
                    .getImporte()
                    .setScale(2, RoundingMode.CEILING)));
    topImpuestos += 18;

    mPDFWriter.addImage(30, topImpuestos, 450, 18, getRectBitmap(450, 18, 0xFF949699));
    mPDFWriter.setColor(255, 255, 255);
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.addText(leftImpuestos + 5, topImpuestos + 3, 9, "ISR RETENIDO");
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(
        leftImpuestos + 100,
        topImpuestos + 3,
        10,
        "$"
            + String.valueOf(
                comprobante
                    .getImpuestos()
                    .getRetenciones()
                    .getRetencion()
                    .get(1)
                    .getImporte()
                    .setScale(2, RoundingMode.CEILING)));
    topImpuestos += 18;

    mPDFWriter.addImage(30, topImpuestos, 450, 18, getRectBitmap(450, 18, 0xFF000000));
    mPDFWriter.setColor(255, 255, 255);
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.addText(leftImpuestos + 5, topImpuestos + 3, 9, "TOTAL");
    if (vence.length() > 0) {
      mPDFWriter.addText(100, topImpuestos + 3, 9, "VALIDO HASTA " + vence.toUpperCase());
    }
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(
        leftImpuestos + 100,
        topImpuestos + 3,
        11,
        "$" + String.valueOf(comprobante.getTotal().setScale(2, RoundingMode.CEILING)));
    topImpuestos += 20;

    /*
     * Footer
     */

    mPDFWriter.setColor(148, 150, 153);
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA);

    int pageCount = mPDFWriter.getPageCount();
    for (int i = 0; i < pageCount; i++) {
      mPDFWriter.setCurrentPage(i);
      mPDFWriter.addText(
          10,
          920,
          8,
          Integer.toString(i + 1)
              + " / "
              + Integer.toString(pageCount)
              + "  https://www.cfdimovil.com.mx/");
    }

    String s = mPDFWriter.asString();
    return s;
  }
예제 #2
0
  public static String generaFacturaPDF(Activity activity, RespuestaComprobante respuesta) {

    SharedPreferences settings =
        PreferenceManager.getDefaultSharedPreferences(activity.getApplicationContext());
    String pictureData = settings.getString(activity.getString(R.string.image_preference), "");

    Comprobante comprobante = respuesta.getComprobanteTimbrado();
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    String fecha = sdf.format(comprobante.getFecha());

    PDFWriter mPDFWriter = new PDFWriter(PaperSize.A4_WIDTH, PaperSize.A4_HEIGHT);

    /*
    CANCELADA
    */
    if (!respuesta.getValid()) {
      mPDFWriter.setColor(221, 99, 99);
      mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);

      mPDFWriter.addTextCorrect(130, 200, 50, "CANCELADA", Transformation.DEGREES_45_ROTATION);

      mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA);
      mPDFWriter.setColor(0, 0, 0);
    }

    int headeLeft = 250;
    if (pictureData != null && pictureData.length() > 0) {
      byte[] b = Base64.decode(pictureData, Base64.DEFAULT);
      Bitmap logo = BitmapFactory.decodeByteArray(b, 0, b.length);
      mPDFWriter.addImage(30, 30, 210, 100, logo);
    } else {
      headeLeft = 30;
    }

    /*
     * Datos Emisor
     */
    int topImpuestos = 30;
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.setColor(98, 99, 102);
    int altoNombre =
        mPDFWriter.addTextMultiline(
            headeLeft, topImpuestos, 8, 30, comprobante.getEmisor().getNombre());
    topImpuestos += altoNombre - 10;
    // mPDFWriter.addText(headeLeft, topImpuestos, 8, comprobante.getEmisor().getNombre());
    if (comprobante.getEmisor().getDomicilioFiscal() != null) {
      mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA);
      if (comprobante.getEmisor().getDomicilioFiscal().getCalle() != null
          && comprobante.getEmisor().getDomicilioFiscal().getCalle().length() > 0) {
        mPDFWriter.addText(
            headeLeft,
            topImpuestos + 10,
            8,
            comprobante.getEmisor().getDomicilioFiscal().getCalle()
                + " #"
                + comprobante.getEmisor().getDomicilioFiscal().getNoExterior());
        topImpuestos += 10;
      }
      if (comprobante.getEmisor().getDomicilioFiscal().getColonia() != null
          && comprobante.getEmisor().getDomicilioFiscal().getColonia().length() > 0) {
        mPDFWriter.addText(
            headeLeft,
            topImpuestos + 10,
            8,
            "COL. "
                + comprobante.getEmisor().getDomicilioFiscal().getColonia()
                + " | C.P. "
                + comprobante.getEmisor().getDomicilioFiscal().getCodigoPostal());
        topImpuestos += 10;
      }
      if (comprobante.getEmisor().getDomicilioFiscal().getEstado() != null
          && comprobante.getEmisor().getDomicilioFiscal().getEstado().length() > 0) {
        mPDFWriter.addText(
            headeLeft,
            topImpuestos + 10,
            8,
            comprobante.getEmisor().getDomicilioFiscal().getEstado()
                + ", "
                + comprobante.getEmisor().getDomicilioFiscal().getEstado()
                + ", "
                + comprobante.getEmisor().getDomicilioFiscal().getPais());
        topImpuestos += 10;
      }
    }
    mPDFWriter.addText(
        headeLeft, topImpuestos + 10, 8, "R.F.C. " + comprobante.getEmisor().getRfc());
    topImpuestos += 10;
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(headeLeft, topImpuestos + 10, 8, comprobante.getMetodoDePago());
    topImpuestos += 10;
    mPDFWriter.addText(headeLeft, topImpuestos + 10, 8, comprobante.getFormaDePago());
    topImpuestos += 10;
    mPDFWriter.addText(
        headeLeft,
        topImpuestos + 10,
        8,
        comprobante.getComplemento().getTimbreFiscalDigital().getUUID());

    /*
     *Folio
     */
    if (comprobante.getTipoDeComprobante() != null
        && comprobante.getTipoDeComprobante().length() > 0) {
      mPDFWriter.addImage(250 + 175, 30, 145, 30, getRectBitmap(145, 45, 0xFFEEF1D7));
      mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA);
      mPDFWriter.setColor(156, 179, 39);
      mPDFWriter.addText(250 + 220, 37, 13, comprobante.getTipoDeComprobante().toUpperCase());
    }

    if (comprobante.getFolio() != null && comprobante.getFolio().length() > 0) {
      mPDFWriter.setColor(238, 241, 215);
      mPDFWriter.addRectangle(250 + 176, 60, 143, 30);
      mPDFWriter.setColor(238, 49, 36);
      mPDFWriter.addText(250 + 200, 60, 36, comprobante.getFolio());
    }
    /*
     * Datos Receptor
     */
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA);
    mPDFWriter.addImage(30, 145, 540, 18, getRectBitmap(540, 18, 0xFFEEF1D7));
    mPDFWriter.setColor(156, 179, 39);
    mPDFWriter.addText(40, 148, 9, "NOMBRE");
    mPDFWriter.addText(310, 148, 9, "R.F.C.");
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(40, 165, 9, comprobante.getReceptor().getNombre());
    mPDFWriter.addText(310, 165, 9, comprobante.getReceptor().getRfc());

    mPDFWriter.addImage(30, 180, 540, 18, getRectBitmap(540, 18, 0xFFDCDDDE));
    mPDFWriter.setColor(148, 150, 153);
    mPDFWriter.addText(40, 183, 9, "DIRECCION");
    mPDFWriter.addText(310, 183, 9, "CIUDAD");
    mPDFWriter.addText(470, 183, 9, "CODIGO POSTAL");
    mPDFWriter.setColor(0, 0, 0);

    if (comprobante.getReceptor().getDomicilio() != null) {
      mPDFWriter.addText(
          40,
          200,
          9,
          comprobante.getReceptor().getDomicilio().getCalle()
              + " "
              + comprobante.getReceptor().getDomicilio().getNoExterior()
              + " "
              + comprobante.getReceptor().getDomicilio().getColonia());
      mPDFWriter.addText(
          310,
          200,
          9,
          comprobante.getReceptor().getDomicilio().getMunicipio()
              + ", "
              + comprobante.getReceptor().getDomicilio().getEstado());
      mPDFWriter.addText(470, 200, 9, comprobante.getReceptor().getDomicilio().getCodigoPostal());
    }

    mPDFWriter.addImage(30, 215, 540, 18, getRectBitmap(540, 18, 0xFFEEF1D7));
    mPDFWriter.setColor(156, 179, 39);
    mPDFWriter.addText(40, 218, 9, "FECHA");
    mPDFWriter.addText(310, 218, 9, "LUGAR DE EXPEDICION");
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(40, 235, 9, fecha);
    mPDFWriter.addText(310, 235, 9, comprobante.getLugarExpedicion());

    /*
     * Conceptos
     */
    mPDFWriter.addImage(30, 250, 540, 18, getRectBitmap(540, 18, 0xFF949699));
    mPDFWriter.setColor(255, 255, 255);
    mPDFWriter.addText(40, 253, 9, "CANTIDAD");
    mPDFWriter.addText(100, 253, 9, "UNIDAD");
    mPDFWriter.addText(180, 253, 9, "CONCEPTO");
    mPDFWriter.addText(500, 253, 9, "IMPORTE");
    mPDFWriter.setColor(0, 0, 0);
    int inicio = 270;
    int sumatoria = 17;
    int index = 0;
    for (Comprobante.Conceptos.Concepto concepto : comprobante.getConceptos().getConcepto()) {
      int posicionY = inicio + (sumatoria * index);
      mPDFWriter.addText(
          40,
          posicionY,
          9,
          String.valueOf(concepto.getCantidad().setScale(2, RoundingMode.CEILING)));
      mPDFWriter.addText(100, posicionY, 9, concepto.getUnidad());
      mPDFWriter.addText(180, posicionY, 9, concepto.getDescripcion());
      mPDFWriter.addText(
          500,
          posicionY,
          9,
          "$" + String.valueOf(concepto.getImporte().setScale(2, RoundingMode.CEILING)));
      index++;
    }

    topImpuestos = 615;
    int leftImpuestos = 30;
    /*
     * QR Code
     */
    InputStream qrCode = new ByteArrayInputStream(respuesta.getCodeQrBmpByte());
    Bitmap qrCodeImg = BitmapFactory.decodeStream(qrCode);
    mPDFWriter.addImage(leftImpuestos, topImpuestos, 120, 120, qrCodeImg);
    mPDFWriter.setColor(148, 150, 153);
    leftImpuestos += 120;

    /*
     * Cantidad con letra
     */
    leftImpuestos += 2;
    mPDFWriter.setColor(148, 150, 153);
    mPDFWriter.addRectangle(leftImpuestos, topImpuestos, 235, 50);
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.addText(leftImpuestos + 8, topImpuestos + 3, 9, "Cantidad con letra");
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA);
    String letra =
        NumeroALetra.convertir(
            String.valueOf(comprobante.getTotal().setScale(2, RoundingMode.CEILING)), true);
    int altoLetra = mPDFWriter.addTextMultiline(leftImpuestos + 8, topImpuestos + 18, 9, 40, letra);
    mPDFWriter.setColor(148, 150, 153);
    int altoSello =
        mPDFWriter.addTextMultiline(
            leftImpuestos,
            topImpuestos + 55,
            9,
            42,
            "Cadena orginal: " + respuesta.getCadenaOriginal());
    leftImpuestos += 237;

    /*
     * Total, impuestos...
     */

    leftImpuestos += 2;
    mPDFWriter.addImage(leftImpuestos, topImpuestos, 90, 18, getRectBitmap(90, 18, 0xFFEEF1D7));
    mPDFWriter.setColor(156, 179, 39);
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.addText(leftImpuestos + 5, topImpuestos + 3, 9, "SUBTOTAL");
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA);
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(
        leftImpuestos + 100,
        topImpuestos + 3,
        10,
        "$" + String.valueOf(comprobante.getSubTotal().setScale(2, RoundingMode.CEILING)));
    topImpuestos += 18;

    topImpuestos += 2;
    mPDFWriter.addImage(leftImpuestos, topImpuestos, 90, 18, getRectBitmap(90, 18, 0xFFDCDDDE));
    mPDFWriter.setColor(148, 150, 153);
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.addText(
        leftImpuestos + 5,
        topImpuestos + 3,
        9,
        "IVA " + comprobante.getImpuestos().getTraslados().getTraslado().get(0).getTasa() + "%");
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(
        leftImpuestos + 100,
        topImpuestos + 3,
        10,
        "$"
            + String.valueOf(
                comprobante
                    .getImpuestos()
                    .getTraslados()
                    .getTraslado()
                    .get(0)
                    .getImporte()
                    .setScale(2, RoundingMode.CEILING)));
    topImpuestos += 18;

    topImpuestos += 0;
    mPDFWriter.addImage(leftImpuestos, topImpuestos, 90, 18, getRectBitmap(90, 18, 0xFFDCDDDE));
    mPDFWriter.setColor(148, 150, 153);
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.addText(
        leftImpuestos + 5,
        topImpuestos + 3,
        9,
        "IEPS " + comprobante.getImpuestos().getTraslados().getTraslado().get(1).getTasa() + "%");
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(
        leftImpuestos + 100,
        topImpuestos + 3,
        10,
        "$"
            + String.valueOf(
                comprobante
                    .getImpuestos()
                    .getTraslados()
                    .getTraslado()
                    .get(1)
                    .getImporte()
                    .setScale(2, RoundingMode.CEILING)));
    topImpuestos += 18;

    topImpuestos += 2;
    mPDFWriter.addImage(leftImpuestos, topImpuestos, 90, 18, getRectBitmap(90, 18, 0xFF949699));
    mPDFWriter.setColor(255, 255, 255);
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.addText(leftImpuestos + 5, topImpuestos + 3, 9, "IVA RETENIDO");
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(
        leftImpuestos + 100,
        topImpuestos + 3,
        10,
        "$"
            + String.valueOf(
                comprobante
                    .getImpuestos()
                    .getRetenciones()
                    .getRetencion()
                    .get(0)
                    .getImporte()
                    .setScale(2, RoundingMode.CEILING)));
    topImpuestos += 18;

    topImpuestos += 0;
    mPDFWriter.addImage(leftImpuestos, topImpuestos, 90, 18, getRectBitmap(90, 18, 0xFF949699));
    mPDFWriter.setColor(255, 255, 255);
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.addText(leftImpuestos + 5, topImpuestos + 3, 9, "ISR RETENIDO");
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(
        leftImpuestos + 100,
        topImpuestos + 3,
        10,
        "$"
            + String.valueOf(
                comprobante
                    .getImpuestos()
                    .getRetenciones()
                    .getRetencion()
                    .get(1)
                    .getImporte()
                    .setScale(2, RoundingMode.CEILING)));
    topImpuestos += 18;

    topImpuestos += 2;
    mPDFWriter.addImage(leftImpuestos, topImpuestos, 90, 18, getRectBitmap(90, 18, 0xFF000000));
    mPDFWriter.setColor(255, 255, 255);
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD);
    mPDFWriter.addText(leftImpuestos + 5, topImpuestos + 3, 9, "TOTAL");
    mPDFWriter.setColor(0, 0, 0);
    mPDFWriter.addText(
        leftImpuestos + 100,
        topImpuestos + 3,
        11,
        "$" + String.valueOf(comprobante.getTotal().setScale(2, RoundingMode.CEILING)));
    topImpuestos += 20;

    /*
     * Footer
     */

    mPDFWriter.setColor(148, 150, 153);
    topImpuestos += 5;
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA);
    int altoSelloCFDI =
        mPDFWriter.addTextMultiline(
            30,
            topImpuestos,
            9,
            100,
            "Sello CFD: " + comprobante.getComplemento().getTimbreFiscalDigital().getSelloCFD());
    topImpuestos += 2;
    int altoCadena =
        mPDFWriter.addTextMultiline(
            30,
            topImpuestos + altoSelloCFDI,
            9,
            100,
            "Sello SAT: " + comprobante.getComplemento().getTimbreFiscalDigital().getSelloSAT());

    int pageCount = mPDFWriter.getPageCount();
    for (int i = 0; i < pageCount; i++) {
      mPDFWriter.setCurrentPage(i);
      mPDFWriter.addText(
          10,
          920,
          8,
          Integer.toString(i + 1)
              + " / "
              + Integer.toString(pageCount)
              + "  https://www.cfdimovil.com.mx/");
    }

    String s = mPDFWriter.asString();
    return s;
  }