简体   繁体   English

如何将 Pdf 转换为 base64 和编码/解码

[英]How to Convert Pdf to base64 and Encode / Decode

OK, I have some pdf need convert to base64 by base64encoder.好的,我有一些 pdf 需要通过 base64encoder 转换为 base64。

finally, I use decoder to convert back to pdf format but my content is lost.最后,我使用解码器转换回 pdf 格式,但我的内容丢失了。

my code :我的代码:

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();

result :结果 :

Encode : https://pastebin.com/fnMACZzH编码: https : //pastebin.com/fnMACZzH

Before base64encode在 base64encode 之前

After decode解码后

Thank You谢谢你

You can decode base64 encoded String and pass that byte[] to FileOutputStream write method to fix this issue.您可以解码 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();

I have used Apache Commons library.我使用过 Apache Commons 库。 The version I used for testing this Utility is commons-code-1.4.jar.我用于测试此实用程序的版本是 commons-code-1.4.jar。 There are multiple uses of Base64 Codec. Base64 编解码器有多种用途。 The one I had a need to was during Docusign eSignature webservice call where the files attached were sent in a Base64 encoded format.我需要的是在 Docusign eSignature webservice 调用期间,其中附加的文件以 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();

    }
}

i hope this work我希望这项工作

if (resultCode == RESULT_OK) {

 InputStream is = null;

  try 

{

is = getContentResolver().openInputStream(imageReturnedIntent.getData());

} 

catch (FileNotFoundException e) 
{

 e.printStackTrace();

 }

 byte[] bytesArray = new byte[0];

try {

  bytesArray = new byte[is.available()];

 } 
catch (IOException e) {

 e.printStackTrace();

  }

  try
 {

  is.read(bytesArray);

String d = Base64.encodeToString(bytesArray, android.util.Base64.DEFAULT);


                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;

public class Base64Sample {

public static void main(String... strings) throws Exception {
    String filePath = "/home/user/sample.pdf";
    File pdfFile = new File(filePath);
    byte[] encoded = Files.readAllBytes(Paths.get(pdfFile.getAbsolutePath()));
    Base64.Encoder enc = Base64.getEncoder();
    byte[] strenc = enc.encode(encoded);
    String encode = new String(strenc, "UTF-8");
    Base64.Decoder dec = Base64.getDecoder();
    byte[] strdec = dec.decode(encode);
    OutputStream out = new FileOutputStream("/home/user/out.pdf");
    out.write(strdec);
    out.close();
}
  }

I tried lots of code then after I tried the below code and its work for me.在尝试了以下代码及其对我的工作之后,我尝试了很多代码。 This code is works for other files also like .png, .jpg, jpeg, .pdf and .doc etc...此代码也适用于其他文件,如 .png、.jpg、jpeg、.pdf 和 .doc 等...

String base64 = Base64.encodeToString(getBytesFromUri(uri, requireContext()), Base64.NO_WRAP);
                        

public static byte[] getBytesFromUri(Uri uri, Context context) throws IOException {
        InputStream iStream = context.getContentResolver().openInputStream(uri);
        ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
        int bufferSize = 1024;
        byte[] buffer = new byte[bufferSize];

        int len = 0;
        while ((len = iStream.read(buffer)) != -1) {
            byteBuffer.write(buffer, 0, len);
        }
        return byteBuffer.toByteArray();
    }

I hope it's helpful to you!我希望它对你有帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM