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.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 |
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