2016-11-22 115 views
0

所以我获得了来自这是pdf文件的字节数组,表示在String像下面的服务的响应:二进制数据到PDF文件

response.pdfStream = "JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFIvRmlsdGVyIC9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nK1aS3MbxxG+45Qql+9zcQlIEat57wxzAgJIcviQTYCqKGIOKwEWN3hJIKgU+Wt88U9I/kKuOflk6OqrTz4RrHyzu7MASCzHUkypCtBOT3dPT39fdy/1ntBIGkLdH//lzaT2+CQmby9q7wnjUmUPxXrJkM6s9u3mIuOZRLZqd68ylS8zunudx8U6q9Bui3W+e12xYl3sXtcPuxerB5dN/OCytQ+fnbGH13kgduJh75h82D2mfPBkhUDso6cqBIwICFj1sACncUCA2YCACDjJZcBJrkJO6pCTcchJG3BS0ICTggWcFDzgpBABJ4UKOalDTsYhJ03ISRtwUrKAk5IHnJQi4KSUASelCjkZAo4MAUeGgKNCwFEh4KgQcFQIOCoEHBUCjgoBR4WAo0PA0SHg6BBwdAg4OgQcHQKODgFHh4CjQ8CJQ8CJQ8CJQ8CJQ8CJQ8CJQ8CJQ8CJQ8AxIeCYEHBMCDgmBBwTAo4JAceEgGNCwLEh4NgQcGwIODYEHBsCjg0Bx4aAY0PAsSHgMBpCDqMh6DAawg6jIfAwGkIPo8GGj..." 

我需要将其转换为绝对字节数组,然后创建PDF文件与它打开。

尝试这样:

byte[] pdfStream = response.pdfStream.getBytes(Charsets.UTF_8); 
InputStream inputStream = new ByteArrayInputStream(pdfStream); 

File file = null; 
    try { 
     file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), filename); 
     Logger.debug("createFile: "+file.getAbsolutePath()); 
     OutputStream outputStream = new FileOutputStream(file); 
     IOUtils.copy(inputStream, outputStream); 
     outputStream.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
return file; 

try { 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.fromFile(file), "application/pdf"); 
    getMainActivity().startActivity(intent); 
    } catch (Exception e) { 
    Logger.printStackTrace(e); 
} 
+0

而当你尝试你的方法,它是否有效?或者你有一些错误?发布它。 –

+1

一个字符串不是一个字节数组。你需要弄清楚字节是如何实际表示的。我的猜测是它是base64编码的 - 这是将任意二进制数据表示为文本的正常方式。另外,请阅读http://stackoverflow.com/editing-help以获取有关如何在问题中发布代码的详细信息 - 对于代码块,请使用缩进而不是反引号。 –

+0

[需要从bytearray(Java)创建PDF的可能的重复](http://stackoverflow.com/questions/1777914/need-to-create-pdf-from-bytearray-java) – DimaSan

回答

2

有了这段代码是很容易的Base64编码的字符串转换成pdf文件。 该字符串是从input.txt文件中读取的。

public void convertInputFile() { 
    try { 
     convertToPDF("/home/input.txt"); 
    } catch (IOException e) { 
    } 
} 

private void convertToPDF(String inputFilePath) throws IOException { 
    byte[] byteArray = Files.toByteArray(new File(inputFilePath)); 
    byte[] bytes = Base64.decodeBase64(byteArray); 
    DataOutputStream os = new DataOutputStream(new FileOutputStream("/home/output.pdf")); 
    os.write(bytes); 
    os.close(); 
}