Java 如何将 Pdf 转换为 base64 和编码/解码
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/52069359/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to Convert Pdf to base64 and Encode / Decode
提问by DKKs
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
Thank You
谢谢你
采纳答案by Ajit Soman
You can decode base64 encoded String and pass that byte[]
to FileOutputStream
write method to fix this issue.
您可以解码 base64 编码的字符串并将其传递byte[]
给FileOutputStream
write 方法来解决此问题。
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();
回答by dev_ramiz_1707
I have used Apache Commons library. The version I used for testing this Utility is commons-code-1.4.jar. There are multiple uses of Base64 Codec. The one I had a need to was during Docusign eSignature webservice call where the files attached were sent in a Base64 encoded format.
我使用过 Apache Commons 库。我用于测试此实用程序的版本是 commons-code-1.4.jar。Base64 编解码器有多种用途。我需要的是在 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
我希望这项工作
回答by Danish Ali
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();
}
}