como hacer una aplicación que lea archivos pdf online en android studio
Sin mas rodeos empezamos con el tutorial:
Primero tenemos que crear nuestra interfaces el cual consistirá en un solo boton al que llamaremos btngenerar, es de lo mas sencillo algo como la siguiente imagen:
Yo no debería dejar el código es un simple botón, pero ya se eres don vergas y doña vergas y hasta apuesto a que te sale error poniendo un botón por eso te dejo el código del activity_main
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="com.androfast.pc.appgenerarpdf.MainActivity">
<Button
android:id="@+id/btnGenerar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/btn_texto" />
</android.support.constraint.ConstraintLayout>
Como importar una librería en android studio
Si ya sabes como? proseguimos con el tutorial, descargate la siguiente librería:
droidText0.4.jar
Ya sabes que esta librería debe estar dentro de la carpeta lib.
Después tenemos que agregarlo a nuestro build.gradle como vemos al final del siguiente código dentro de dependencies.
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
compile files('libs/droidText.0.4.jar')
}
Debes agregar una imagen con el nombre logo dentro de tu carpeta Drawable
Ahora si podemos usar el código en nuestro MainActivity.
package com.androfast.pc.appgenerarpdf;
import android.Manifest;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.HeaderFooter;
import com.lowagie.text.Image;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.pdf.ColumnText;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import harmony.java.awt.Color;
public class MainActivity extends AppCompatActivity {
private final static String NOMBRE_DIRECTORIO = "MiPdf";
private final static String NOMBRE_DOCUMENTO = "prueba.pdf";
private final static String ETIQUETA_ERROR = "ERROR";
Button btnGenerar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Permisos.
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,}, 1000);
} else {
}
// Generaremos el documento al hacer click sobre el boton.
btnGenerar=(Button) findViewById(R.id.btnGenerar);
btnGenerar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
generarPdf();
Toast.makeText(MainActivity.this, "Se creo tu archivo pdf", Toast.LENGTH_SHORT).show();
}
});
}
public void generarPdf() {
// Creamos el documento.
Document documento = new Document();
try {
File f = crearFichero(NOMBRE_DOCUMENTO);
// Creamos el flujo de datos de salida para el fichero donde
// guardaremos el pdf.
FileOutputStream ficheroPdf = new FileOutputStream(
f.getAbsolutePath());
// Asociamos el flujo que acabamos de crear al documento.
PdfWriter writer = PdfWriter.getInstance(documento, ficheroPdf);
// Incluimos el pie de pagina y una cabecera
HeaderFooter cabecera = new HeaderFooter(new Phrase(
"Esta es mi cabecera"), false);
HeaderFooter pie = new HeaderFooter(new Phrase(
"Este es mi pie de pagina"), false);
documento.setHeader(cabecera);
documento.setFooter(pie);
// Abrimos el documento.
documento.open();
// Añadimos un titulo con la fuente por defecto.
documento.add(new Paragraph("Titulo 1"));
Font font = FontFactory.getFont(FontFactory.HELVETICA, 28,
Font.BOLD, Color.RED);
documento.add(new Paragraph("Titulo personalizado", font));
// Insertamos una imagen que se encuentra en los recursos de la
// aplicacion.
Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),
R.drawable.logo);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
Image imagen = Image.getInstance(stream.toByteArray());
documento.add(imagen);
// Insertamos una tabla.
PdfPTable tabla = new PdfPTable(5);
for (int i = 0; i < 15; i++) {
tabla.addCell("Celda " + i);
}
documento.add(tabla);
// Agregar marca de agua
font = FontFactory.getFont(FontFactory.HELVETICA, 42, Font.BOLD,
Color.GRAY);
ColumnText.showTextAligned(writer.getDirectContentUnder(),
Element.ALIGN_CENTER, new Paragraph(
"androfast.com", font), 297.5f, 421,
writer.getPageNumber() % 2 == 1 ? 45 : -45);
} catch (DocumentException e) {
Log.e(ETIQUETA_ERROR, e.getMessage());
} catch (IOException e) {
Log.e(ETIQUETA_ERROR, e.getMessage());
} finally {
// Cerramos el documento.
documento.close();
}
}
public static File crearFichero(String nombreFichero) throws IOException {
File ruta = getRuta();
File fichero = null;
if (ruta != null)
fichero = new File(ruta, nombreFichero);
return fichero;
}
/**
* Obtenemos la ruta donde vamos a almacenar el fichero.
*
* @return
*/
public static File getRuta() {
// El fichero sera almacenado en un directorio dentro del directorio
// Descargas
File ruta = null;
if (Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
ruta = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
NOMBRE_DIRECTORIO);
if (ruta != null) {
if (!ruta.mkdirs()) {
if (!ruta.exists()) {
return null;
}
}
}
} else {
}
return ruta;
}
}
Revisemos un poco el cogido
La primera linea da el nombre a nuestra carpeta donde se guardara el archivo pdf
La segunda linea da el nombre al archivo pdf
private final static String NOMBRE_DIRECTORIO = "MiPdf";
private final static String NOMBRE_DOCUMENTO = "prueba.pdf";
Lo demás esta comentado linea por linea, para que veas donde se guardo tu documento debes ir a la memoria interna de tu móvil–descargas.
También debes de agregar estos dos permisos en tu AndroidManifest
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
como hacer una aplicación que lea archivos pdf online en android studio
Hola soy Alex Céspedes fundador de ANDROFAST, programo algunas cosas por diversión, me gusta aprender cosas nuevas y estoy pendiente de todo lo que tenga que ver con tecnología. Este blog lo cree para todas las personas que tengan dificultades en la programación, para ser sincero nunca fui bueno y reprobé algunos cursos de programación, pero mis ganas de aprender pudieron más. SI YO PUEDO TU PUEDES ANIMO!
i have an error in the line:
Image imagen = Image.getInstance(stream.toByteArray());
java.lang.UnsatisfiedLinkError: No implementation found for long org.apache.harmony.awt.gl.color.NativeCMM.cmmOpenProfile(byte[]) (tried Java_org_apache_harmony_awt_gl_color_NativeCMM_cmmOpenProfile and Java_org_apache_harmony_awt_gl_color_NativeCMM_cmmOpenProfile___3B)
Buenas noches muchas gracias por tu aporte!!!.
Lo seguí al pie de la letra y me genera el pdf exactamente igual al tuyo pero sin la tabla ni la marca de agua. Agradezco si me puedas ayudar.
Saludos.