我从Web服务获取此字符串。
“ JVBERi0xLjQKMyAwIG9iago8PC9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyAyIDAgUgovR3JvdXAgPDwvVHlwZSAvR3JvdXAgL1MgL1RyYW5zcGFyZW5jeSAvQ1MgL0RldmljZVJHQj4”
它应该是一个pdf文件,我从apache尝试了这个库 pdfbox ,但它将内容作为文本写入pdf中。我已经尝试使用 ByteArrayInputStream 但是创建的pdf无效,已损坏,这是我编写的一些代码。
public void escribePdf(String texto, String rutaSalida) throws IOException{
byte[] biteToRead = texto.getBytes();
InputStream is = new ByteArrayInputStream(biteToRead );
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(new File(rutaSalida))));
int c;
while((c = is.read()) != -1) {
out.writeByte(c);
}
out.close();
is.close();
}
答案 0 :(得分:3)
那是Base64编码(最有可能是UTF-8)数据,你必须在使用前解码它;如:
import sun.misc.BASE64Decoder;
...
BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(biteToRead);
...
编辑: 对于java> = 1.8,请使用:
byte[] decodedBytes = java.util.Base64.getDecoder().decode(biteToRead);
答案 1 :(得分:2)
[JDK 8]
进口:
import java.io.*;
import java.util.Base64;
代码:
// Get bytes, most important part
byte[] bytes = Base64.getDecoder().decode("JVBERi0xLjQKMyAwIG9iago8P...");
// Write to file
DataOutputStream os = new DataOutputStream(new FileOutputStream("output.pdf"));
os.write(bytes);
os.close();
答案 2 :(得分:1)
你的字符串最终是64位编码的。它转换为
%PDF-1.4
3 0 obj
<</Type /Page
/Parent 1 0 R
/Resources 2 0 R
/Group <</Type /Group /S /Transparency /CS /DeviceRG
这本身并不是一个完整的pdf文件,这让我相信你从服务器读取数据的方式有问题。
从java 6开始,他们在sun包之外添加了一个base 64转换器。
byte [] bytes = javax.xml.bind.DatatypeConverte.parseBase64Binary(texto);
new String(bytes, "UTF-8");