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

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.




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.

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.

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

No hay comentarios:

Publicar un comentario