У меня есть обычный pdf-файл A.pdf, третье лицо кодирует файл в base64 и отправляет его мне в веб-сервисе в виде длинной строки (я не контролирую третье лицо).
Моя проблема заключается в том, что когда я декодирую строку с помощью java org.apache.commons.codec.binary.Base64 и корректирую вывод в файл с именем B.pdf
Я ожидаю, что B.pdf будет идентичен A.pdf, но B.pdf оказывается немного другим, чем A.pdf. В результате B.pdf не распознается как действительный PDF-файл acrobat.
Есть ли в base64 разные типы механизмов кодирования \ кодировки? я могу определить, как полученная строка закодирована так, чтобы B.pdf = A.pdf?
РЕДАКТИРОВАТЬ - это файл, который я хочу декодировать, после декодирования он должен открыться как pdf
мой закодированный файл
это заголовок файлов, открытых в блокноте ++
**A.pdf**
%PDF-1.4
%±²³´
%Created by Wnv/EP PDF Tools v6.1
1 0 obj
<<
/PageMode /UseNone
/ViewerPreferences 2 0 R
/Type /Catalog
**B.pdf**
%PDF-1.4
%±²³´
%Created by Wnv/EP PDF Tools v6.1
1 0! bj
<<
/PageMode /UseNone
/ViewerPreferences 2 0 R
/]
pe /Catalog
так я декодирую строку
private static void decodeStringToFile(String encodedInputStr,
String outputFileName) throws IOException {
BufferedReader in = null;
BufferedOutputStream out = null;
try {
in = new BufferedReader(new StringReader(encodedInputStr));
out = new BufferedOutputStream(new FileOutputStream(outputFileName));
decodeStream(in, out);
out.flush();
} finally {
if (in != null)
in.close();
if (out != null)
out.close();
}
}
private static void decodeStream(BufferedReader in, OutputStream out)
throws IOException {
while (true) {
String s = in.readLine();
if (s == null)
break;
//System.out.println(s);
byte[] buf = Base64.decodeBase64(s);
out.write(buf);
}
}