TransWikia.com

Crear un Archivo PDF de un Byte Array?

Stack Overflow en español Asked by Mark Dev on November 7, 2021

Bueno amigos pido ayuda nuevamente, ya probe varias rutinas, para covertir un Byte Array a un archivo PDF, que encontre en la version en ingles de este foro, ya recibo un byte array de un web service, pero me generan errores como que no tiene permisos en el manifest, alguna sugerencia……

String nom_pdf = cv.getAsString("Id") + cv.getAsString("Tipo") + cv.getAsString("Dispositivo") +cv.getAsString("Fecha");

    File mfile = new File("/sdcard/" + nom_pdf +".pdf");


    try {
        FileUtils.writeByteArrayToFile(mfile, cv.getAsByteArray("ByteToPDF") );
    } catch (IOException e) {
        e.printStackTrace();
    }

La segunda forma que lo intente:

File dir = Environment.getExternalStorageDirectory();

    String nom_pdf = cv.getAsString("Id_mov") + cv.getAsString("TipoEdoCta") + cv.getAsString("Dispositivo") +cv.getAsString("FechaCorte");


    File assist = new File("/sdcard/" + nom_pdf +".pdf");
    try {
        InputStream fis = new FileInputStream(assist);

        long length = assist.length();
        if (length > Integer.MAX_VALUE) {
            Log.e("Muy largo", "No se puede leer");
        }
        byte[] bytes = new byte[(int) length];
        int offset = 0;
        int numRead = 0;
        while (offset < bytes.length && (numRead = fis.read(bytes, offset, bytes.length - offset)) >= 0) {
            offset += numRead;
        }

        File data = new File(dir, "mydemo.pdf");
        OutputStream op = new FileOutputStream(data);
        op.write(bytes);
    } catch (IOException e) {
        e.printStackTrace();
    }

la tercera forma:

File file = new File("java.pdf");

    FileOutputStream fis = new FileOutputStream(file);

    ByteArrayOutputStream bos = new ByteArrayOutputStream();

    byte[] buf = new byte[1024];

    for (int readNum; (readNum = fis.read(buf)) != -1; ){
        bos.write(buf, 0, readNum);
    }

2 Answers

Intenta con este codigo...

public static void main(String[] args)
{
    cv = ?

    File dir = Environment.getExternalStorageDirectory();

    String nom_pdf = cv.getAsString("Id_mov") + cv.getAsString("TipoEdoCta") + cv.getAsString("Dispositivo") +cv.getAsString("FechaCorte");


    File assist = new File("/sdcard/" + nom_pdf +".pdf");
    File data = new File(dir, "mydemo.pdf");

    conect(new FileInputStream(assist), new FileOutputStream(data), 1024, true);
}

public static void conect(final InputStream in, final OutputStream out, final int buffSize, final boolean close)
{
    final byte[] bytes = new byte[buffSize];

    int lenght;

    while((lenght = in.read(bytes)) != -1)
    {
        out.write(bytes, 0, lenght);
    }

    if(close)
    {
        out.close();
        in.close();
    }
}

tu pregunta es extrania ya que no hay ningun vercator de bytes en tu codigo.. en caso de si fuera como dices... seria asi:

    final byte[] bytes = ?
    conect(new ByteArrayInputStream(bytes), new FileOutputStream(data), 1024, true);

Answered by Cristhian Javier Ulloa Carmona on November 7, 2021

Para escribir un archivo a disco, en este caso en la SDCard debes definir el permiso WRITE_EXTERNAL_STORAGE dentro de tu AndroidManifest.xml:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

Para que tu aplicación realice la creación del archivo en dispositivos con Android 6.0 o mayor debes requerir el permiso manualmente en tiempo de ejecución, revisa:

Como crear un directorio y grabar un archivo txt en la memoria externa SD

Después de tener los permisos definidos es importante usar el método getExternalStorageDirectory() para obtener la ruta real del directorio de almacenamiento externo, ya que si lo defines como "/sdcard/" este directorio puede no existir en la estructura de archivos de algún dispositivo.

// File mfile = new File("/sdcard/" + nom_pdf +".pdf");
 File mfile = new File(Environment.getExternalStorageDirectory() + "/Android/data/" + nom_pdf +".pdf");

Answered by Elenasys on November 7, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP