Как конвертировать PDF в base64 и кодировать / декодировать - PullRequest
0 голосов
/ 29 августа 2018

ОК, мне нужно преобразовать PDF в base64 с помощью base64encoder.

наконец, я использую декодер для преобразования обратно в формат pdf, но мой контент потерян.

мой код:

byte[] input_file = Files.readAllBytes(Paths.get("C:\\user\\Desktop\\dir1\\dir2\\test3.pdf"));
    byte[] encodedBytes = Base64.getEncoder().encode(input_file);

    String pdfInBase64 = new String(encodedBytes);
    String originalString = new String(Base64.getDecoder().decode(encodedBytes));

    System.out.println("originalString : " + originalString);

    FileOutputStream fos = new FileOutputStream("C:\\user\\Desktop\\dir1\\dir2\\newtest3.pdf");
    fos.write(originalString.getBytes());
    fos.flush();
    fos.close();

результат:

Код: https://pastebin.com/fnMACZzH

До base64encode

После декодирования

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Вы можете декодировать строку, закодированную в base64, и передать этот метод записи byte[] в FileOutputStream, чтобы решить эту проблему.

        String filePath = "C:\\Users\\xyz\\Desktop\\";
        String originalFileName = "96172560100_copy2.pdf";
        String newFileName = "test.pdf";

        byte[] input_file = Files.readAllBytes(Paths.get(filePath+originalFileName));

        byte[] encodedBytes = Base64.getEncoder().encode(input_file);
        String encodedString =  new String(encodedBytes);
        byte[] decodedBytes = Base64.getDecoder().decode(encodedString.getBytes());

        FileOutputStream fos = new FileOutputStream(filePath+newFileName);
        fos.write(decodedBytes);
        fos.flush();
        fos.close();
0 голосов
/ 29 августа 2018

Я использовал библиотеку Apache Commons. Версия, которую я использовал для тестирования этой Утилиты: commons-code-1.4.jar. Существует многократное использование кодека Base64. Тот, в котором я нуждался, был во время вызова веб-службы Docusign eSignature, где вложенные файлы были отправлены в формате Base64.

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.commons.codec.binary.Base64;

public class FileCodecBase64 {

    private static final boolean IS_CHUNKED = true;

    public static void main(String args[]) throws Exception {

        /* Encode a file and write the encoded output to a text file. */
        encode("C:/temp/something.pdf", "c:/temp/something-encoded.txt", IS_CHUNKED);

        /* Decode a file and write the decoded file to file system */
        decode("C:/temp/something-encoded.txt", "c:/temp/something-decoded.pdf");
    }

    /**
     * This method converts the content of a source file into Base64 encoded data and saves that to a target file.
     * If isChunked parameter is set to true, there is a hard wrap of the output  encoded text.
     */
    private static void encode(String sourceFile, String targetFile, boolean isChunked) throws Exception {

        byte[] base64EncodedData = Base64.encodeBase64(loadFileAsBytesArray(sourceFile), isChunked);

        writeByteArraysToFile(targetFile, base64EncodedData);
    }

    public static void decode(String sourceFile, String targetFile) throws Exception {

        byte[] decodedBytes = Base64.decodeBase64(loadFileAsBytesArray(sourceFile));

        writeByteArraysToFile(targetFile, decodedBytes);
    }

    /**
     * This method loads a file from file system and returns the byte array of the content.
     * 
     * @param fileName
     * @return
     * @throws Exception
     */
    public static byte[] loadFileAsBytesArray(String fileName) throws Exception {

        File file = new File(fileName);
        int length = (int) file.length();
        BufferedInputStream reader = new BufferedInputStream(new FileInputStream(file));
        byte[] bytes = new byte[length];
        reader.read(bytes, 0, length);
        reader.close();
        return bytes;

    }

    /**
     * This method writes byte array content into a file.
     * 
     * @param fileName
     * @param content
     * @throws IOException
     */
    public static void writeByteArraysToFile(String fileName, byte[] content) throws IOException {

        File file = new File(fileName);
        BufferedOutputStream writer = new BufferedOutputStream(new FileOutputStream(file));
        writer.write(content);
        writer.flush();
        writer.close();

    }
}

Я надеюсь, что эта работа

...