Blog para desarrollo de aplicaciones en Android, aprende paso a paso como crear aplicaciones.

Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación para mostrarle publicidad personalizada y realizar análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. OK Más información | Y más

Como crear un documento PDF en Android

Como crear un documento PDF en Android

Hola amigos vamos a aprender a como crear un documento PDF en nuestra aplicación Android. De forma muy funcional para imprimir reportes para nuestros clientes.

Como crear un documento PDF en Android

Crear Proyecto Android Studio (Aquí)

Vamos a crear nuestro proyecto para desarrollar el siguiente ejemplo puedes visitar el enlace y una ves terminado puedes volver a continuar con nuestro proyecto de ejemplo.
Como crear un documento PDF en Android
Como crear un documento PDF en Android


Diseño Proyecto Android Studio como crear un documento PDF

Vamos a crear el diseño de nuestra aplicación para generar un archivo PDF en Android.

Utilizaremos los siguientes controles para mostrarlos en el PDF que se va a generar.

  • ImageView
  • Button
  • TextView

La imagen pueden descargarla o utilizar la que ustedes tengan.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:id="@+id/llPdf"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#fff"
        android:padding="5dp"
        android:orientation="vertical">

        <Button
            android:id="@+id/btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Create PDF" />

        <ImageView
            android:id="@+id/iv"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:src="@drawable/android" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Universo Android">
        </TextView>

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>


El resultado de nuestra actividad seria el siguiente.
Como crear un documento PDF en Android
Como crear un documento PDF en Android

Código para generar archivo PDF en Android

Ahora continuamos y vamos a escribir el código para nuestro ejemplo de forma sencilla.
import androidx.appcompat.app.AppCompatActivity; 
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.pdf.PdfDocument;
import android.net.Uri;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {
    // Declarar variables de los controles.
    private Button btnCrearPDF;
    private LinearLayout lnLayout;
    private Bitmap bitmap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Asignar las propiedades de los controles.
        btnCrearPDF = findViewById(R.id.btn);
        lnLayout = findViewById(R.id.llPdf);

        btnCrearPDF.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Capturar medidas de LinearLayout.
                Log.d("Tamaño"," " + lnLayout.getWidth() +"  " + lnLayout.getWidth());
                bitmap = loadBitmapFromView(lnLayout, lnLayout.getWidth(), lnLayout.getHeight());
                createPdf();
            }
        });

    }
    public static Bitmap loadBitmapFromView(View v, int width, int height) {
        Bitmap bmpImg = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(bmpImg);
        v.draw(c);
        return bmpImg;
    }

    // Funcion para generar el PDF
    private void createPdf(){
        DisplayMetrics displaymetrics = new DisplayMetrics();
        this.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        float hight = displaymetrics.heightPixels ;
        float width = displaymetrics.widthPixels ;

        int convertHighet = (int) hight, convertWidth = (int) width;
        PdfDocument document = new PdfDocument();
        PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(convertWidth, convertHighet, 1).create();
        PdfDocument.Page page = document.startPage(pageInfo);

        Canvas canvas = page.getCanvas();

        Paint paint = new Paint();
        canvas.drawPaint(paint);

        bitmap = Bitmap.createScaledBitmap(bitmap, convertWidth, convertHighet, true);

        paint.setColor(Color.BLUE);
        canvas.drawBitmap(bitmap, 0, 0 , null);
        document.finishPage(page);
        // Ruta donde se almacenara
        String targetPdf = "/sdcard/PDFGenerado.pdf";
        File filePath;
        filePath = new File(targetPdf);
        try {
            document.writeTo(new FileOutputStream(filePath));
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(this, "Algo anda mal: " + e.toString(), Toast.LENGTH_LONG).show();
        }
        document.close();
        Toast.makeText(this, "PDF esta creado!!!", Toast.LENGTH_SHORT).show();
        abrirPDFGenerado();

    }
    // Abrir el archivo PDF una vez generado.
    private void abrirPDFGenerado(){
        File file = new File("/sdcard/pdffromlayout.pdf");
        if (file.exists())
        {
            Intent intent=new Intent(Intent.ACTION_VIEW);
            Uri uri = Uri.fromFile(file);
            intent.setDataAndType(uri, "application/pdf");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            try
            {
                startActivity(intent);
            }
            catch(ActivityNotFoundException e)
            {
                Toast.makeText(MainActivity.this, "No hay aplicación disponible para ver pdf", Toast.LENGTH_LONG).show();
            }
        }
    }
}


Ahora que lo tenemos listo podemos proseguir y ejecutar nuestra aplicación para ver el resultado del archivo PDF en Android.

Crear emulador AVD en Android (Aquí)

Vamos a crear un emulador  para ver nuestra aplicación en ejecución.

Y con esto tendríamos listo nuestro tutorial. Seguiremos desarrollando de forma mas compleja este ejemplo para uso en reportes con tablas, etc.


Descargar

Curso Kotlin Español

No hay comentarios:

Publicar un comentario

x

Registrate!

Curso Android Español

Curso Kotlin Español

eBook Free Android Studio

Noticias y Eventos

¡Directamente a tu INBOX!

Le enviaremos nuestros recursos gratis. Para obtener nuestro contenido nuevo, únase a nuestra comunidad. No te molestaremos enviando información inútil. ¡No te pierdas ninguna actualización, mantente conectado! Recuerda verificar tu correo electronico.

Ingrese su dirección de correo electrónico:

Entregado por FeedBurner