将字符串表示的二进制数据转换为PDF文件

5

我收到了一个来自服务的响应,它是一个PDF文件的字节数组表示,以String形式呈现如下:

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);
}

当你尝试使用你的方法时,它是否有效?还是出现了一些错误?请发布它。 - Aleksandr Podkutin
1
一个字符串不是一个字节数组。你需要弄清楚这些字节实际上是如何表示的。我猜它是base64编码的 - 这将是表示任意二进制数据为文本的正常方式。另外,请阅读http://stackoverflow.com/editing-help以了解如何在问题中发布代码的详细信息 - 对于代码块,请使用缩进而不是反引号。 - Jon Skeet
可能是需要从bytearray(Java)创建PDF的重复问题。 - DimaSan
它无法显示并显示格式无效, @JonSkeet 你可能是对的,我在发布问题时意识到了这一点 :) - Canberk Ozcelik
1个回答

5
使用此代码片段,将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();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接