从java中的二进制数据创建pdf

时间:2014-05-19 22:07:06

标签: java pdf java-io

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

}

3 个答案:

答案 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");