java - 从网上下载pdf后出现空白页

标签 java pdf httpclient outputstream writer

我正在尝试使用 HttpClient 下载 PDF 文件,它正在下载 PDF 文件,但页面是空白的。如果我打印它们,我可以从响应中看到控制台上的字节。但是当我尝试将其写入文件时,它会生成一个空白文件。

FileUtils.writeByteArrayToFile(new File(outputFilePath), bytes);

然而,该文件按预期显示了正确的大小 103KB 和 297KB,但它只是空白!!

我也尝试过输出流:

FileOutputStream fileOutputStream = new FileOutputStream(outFile);
fileOutputStream.write(bytes);

还尝试使用 UTF-8 编码进行编写,例如:

Writer out = new BufferedWriter( new OutputStreamWriter(
                new FileOutputStream(outFile), "UTF-8"));
        String str = new String(bytes, StandardCharsets.UTF_8);
        try {
            out.write(str);
        } finally {
            out.close();
        }

没有什么对我有用。任何建议都将受到高度赞赏..

更新:我正在使用 DefaultHttpClient。

HttpGet httpget = new HttpGet(targetURI);
HttpResponse response = null;
String htmlContents = null;
try {
    httpget = new HttpGet(url);
    response = httpclient.execute(httpget);
    InputStreamReader dataStream=new InputStreamReader(response.getEntity().getContent());
    byte[] bytes = IOUtils.toByteArray(dataStream);
...

最佳答案

你愿意

InputStreamReader dataStream=new InputStreamReader(response.getEntity().getContent());
byte[] bytes = IOUtils.toByteArray(dataStream);

正如评论中已经提到的,使用 Reader 类可能会损坏二进制数据,例如PDF 文件。因此,您不应将内容包装在 InputStreamReader 中。

由于您的内容可用于构造 InputStreamReader,因此我假设 response.getEntity().getContent() 返回一个 InputStream >。这样的InputStream通常可以直接用作IOUtils.toByteArray参数。

所以:

InputStream dataStream=response.getEntity().getContent();
byte[] bytes = IOUtils.toByteArray(dataStream);

应该已经适合你了!

关于java - 从网上下载pdf后出现空白页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48234176/

相关文章:

c# - HttpClient 在 using 语句中

java - Android:从网页获取 HTML 作为字符串,HttpClient 不工作

java - 如何编写可以提取 JAR 文件并将其数据存储在指定目录(位置)的 Java 程序?

java - 映射中的值类型不匹配

Python合并pdf而不压缩

grails - 获取 paypal rest api grails 的访问 token

java - NoClassDefFoundError:注释处理期间的 org/junit/AfterClass

java - 如何排除/storage/emulated/0/Ringtones中的文件

php - 从 URL 获取 PDF 的原始创建日期

c++ - 使用 Poppler (C++) 从 PDF 中提取文本