如何将字符串中的PDF内容写入java中的文件?

时间:2017-02-07 09:16:55

标签: java

我收到来自包含PDF的服务器的回复。如下所示(仅在下面显示简短的编辑版本):

%PDF-1.4
%????
9 0 obj
%%EOF

使用此字符串或字节数组,如何创建pdf文件?

我已尝试使用以下内容,但它在pdf中显示空白页

OutputStream oos = new FileOutputStream("test.pdf");
oos.write(b);

我可以在控制台中看到整个字符串,它是一个以%PDF-1.4开头并以%% EOF结尾的长字符串。我也尝试读取8192字节并写入。结果仍然相同:

        byte[] buf = wholeString.getBytes(Charset.forName("UTF-8"));

        OutputStream oos = new FileOutputStream(tpath);

        InputStream is = new ByteArrayInputStream(buf);
        int c = 0;

        while ((c = is.read(buf, 0, buf.length)) > 0) {
            System.out.println();
            oos.write(buf, 0, c);
            oos.flush();
        }

        oos.close();
        is.close(); 

我正在使用EntityUtils来获取流:

String responseBody = EntityUtils.toString(httpResponse.getEntity(), Charset.forName("UTF-8"));

然后将转换后的字符串发送到另一个方法,我尝试将其写入文件。

1 个答案:

答案 0 :(得分:2)

在评论中讨论后,这应该可以解决您的直接问题:

byte[] entityBytes = EntityUtils.toByteArray(httpResponse.getEntity());
Files.write(Paths.get("test.pdf"), entityBytes);

任何进入你程序的东西总是以字节形式出现。

如果您没有从程序外部获取字节,这意味着某些框架或库已经完成了解码,可能是错误的。

请注意,作为一般规则,除非:

,否则应始终避免转换为字符串
  1. 你100%确定你需要一个字符串。 (PDF,JSON或XML应该存储和解析为字节,而不是字符串)
  2. 您100%确定字节实际上代表一个字符串。这不是这种情况,因为字节代表PDF,而不是字符串。
  3. 您100%确定使用哪种编码将字节解码为字符串。 PDF不是UTF-8字符串。