PDF в байтовый массив и наоборот - PullRequest
27 голосов
/ 15 июля 2009

Мне нужно преобразовать pdf в байтовый массив и наоборот.

Может ли кто-нибудь мне помочь?

Вот так я конвертирую в байтовый массив

public static byte[] convertDocToByteArray(String sourcePath) {

    byte[] byteArray=null;
    try {
        InputStream inputStream = new FileInputStream(sourcePath);


        String inputStreamToString = inputStream.toString();
        byteArray = inputStreamToString.getBytes();

        inputStream.close();
    } catch (FileNotFoundException e) {
        System.out.println("File Not found"+e);
    } catch (IOException e) {
                System.out.println("IO Ex"+e);
    }
    return byteArray;
}

Если я использую следующий код для преобразования его обратно в документ, создается PDF. Но это говорит 'Bad Format. Not a pdf'.

public static void convertByteArrayToDoc(byte[] b) {          

    OutputStream out;
    try {       
        out = new FileOutputStream("D:/ABC_XYZ/1.pdf");
        out.close();
        System.out.println("write success");
    }catch (Exception e) {
        System.out.println(e);
    }

Ответы [ 12 ]

0 голосов
/ 29 апреля 2012

Это работает для меня:

try(InputStream pdfin = new FileInputStream("input.pdf");OutputStream pdfout = new FileOutputStream("output.pdf")){
    byte[] buffer = new byte[1024];
    int bytesRead;
    while((bytesRead = pdfin.read(buffer))!=-1){
        pdfout.write(buffer,0,bytesRead);
    }
}

Но ответ Джона на меня не сработает, если использовать его следующим образом:

try(InputStream pdfin = new FileInputStream("input.pdf");OutputStream pdfout = new FileOutputStream("output.pdf")){

    int k = readFully(pdfin).length;
    System.out.println(k);
}

Выводит ноль как длину. Это почему ?

0 голосов
/ 15 июля 2009

PDF-файлы могут содержать двоичные данные, и есть вероятность, что они искажаются при выполнении ToString. Мне кажется, что вы хотите этого:

        FileInputStream inputStream = new FileInputStream(sourcePath);

        int numberBytes = inputStream .available();
        byte bytearray[] = new byte[numberBytes];

        inputStream .read(bytearray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...