鉴于base64输入,如何将其转换为Android中的PDF文件?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
setContentView(R.layout.activity_main);
// Get the PDF file to encode it into Base64
File file = new File("/mnt/sdcard/download/Base64.pdf");
try {
// Files is from Guava library
Files.toByteArray(file);
// Encoded into Base64
byte[] temp = Base64.encode(Files.toByteArray(file), Base64.DEFAULT);
// For testing purposes, wrote the encoded string to file
writeToFile(Base64.encodeToString(temp, Base64.DEFAULT).toString());
} catch (IOException e) {
Log.d(tag, "File.toByteArray() error");
e.printStackTrace();
}
}
我能够使用http://www.webutils.pl/index.php?idx=base64来测试PDF文件是否正确编码。但我希望能够自己将base64解码为PDF。我该怎么做?
修改1
按照Saneesh CS的建议尝试以下代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
setContentView(R.layout.activity_main);
// Get the PDF file to encode it into Base64
File file = new File("/mnt/sdcard/download/Base64.pdf");
try {
// Files is from Guava library
Files.toByteArray(file);
// Encoded into Base64
byte[] temp = Base64.encode(Files.toByteArray(file), Base64.DEFAULT);
// Tried with the below line, but same result.
byte[] temp1 = Base64.encode(Files.toByteArray(file), 0);
// For testing purposes, wrote the encoded string to file
// writeToFile(Base64.encodeToString(temp, Base64.DEFAULT).toString());
final File dwldsPath = new File(Environment.getExternalStorageDirectory(), "test7.pdf");
byte[] pdfAsBytes = Base64.decode(temp, 0);
FileOutputStream os;
os = new FileOutputStream(dwldsPath, false);
os.write(pdfAsBytes);
os.flush();
os.close();
} catch (IOException e) {
Log.d(tag, "File.toByteArray() error");
e.printStackTrace();
}
}
以上代码有效。
答案 0 :(得分:15)
final File dwldsPath = new File(DOWNLOADS_FOLDER + fileName + ".pdf");
byte[] pdfAsBytes = Base64.decode(txt, 0);
FileOutputStream os;
os = new FileOutputStream(dwldsPath, false);
os.write(pdfAsBytes);
os.flush();
os.close();
试试这段代码。 txt是base64编码的字符串。
答案 1 :(得分:1)
此代码可能对您有所帮助。我已经执行了附加的代码,它工作得很好。
public static GetFilePathAndStatus getFileFromBase64AndSaveInSDCard(String base64, String filename,String extension){
GetFilePathAndStatus getFilePathAndStatus = new GetFilePathAndStatus();
try {
byte[] pdfAsBytes = Base64.decode(base64, 0);
FileOutputStream os;
os = new FileOutputStream(getReportPath(filename,extension), false);
os.write(pdfAsBytes);
os.flush();
os.close();
getFilePathAndStatus.filStatus = true;
getFilePathAndStatus.filePath = getReportPath(filename,extension);
return getFilePathAndStatus;
} catch (IOException e) {
e.printStackTrace();
getFilePathAndStatus.filStatus = false;
getFilePathAndStatus.filePath = getReportPath(filename,extension);
return getFilePathAndStatus;
}
}
public static String getReportPath(String filename,String extension) {
File file = new File(Environment.getExternalStorageDirectory().getPath(), "ParentFolder/Report");
if (!file.exists()) {
file.mkdirs();
}
String uriSting = (file.getAbsolutePath() + "/" + filename + "."+extension);
return uriSting;
}
public static class GetFilePathAndStatus{
public boolean filStatus;
public String filePath;
}