【问题标题】:How to download a pdf file programmatically from a webpage with .html extension?如何以编程方式从扩展名为 .html 的网页下载 pdf 文件?
【发布时间】:2013-10-11 02:28:08
【问题描述】:

我在这个论坛上查看了所有类似的questions(不仅是这个!),并尝试了所有这些方法,但仍然无法以编程方式下载测试文件:http://pdfobject.com/markup/examples/full-browser-window.html

以下是我要下载的测试文件的direct link。这是一个开放访问的测试pdf文件,因此任何人都可以使用它来测试下载方法。

如何下载此特定文件以使其具有 pdf 扩展名?

【问题讨论】:

  • 你可以按照那些答案所说的去做。向我们展示您尝试了什么以及失败的原因。
  • 您遇到了什么具体问题?听起来您只是在说“它不起作用”-您是否遇到错误?崩溃?还有什么?
  • 感谢您的回复。我尝试了所有找到的方法,但总是有错误,例如contentLenght = -1。我将使用我的一次尝试的代码更新我的问题,但这会占用大量空间。这是更新(见上文)
  • 您下载它就像下载任何其他类型的文件一样,扩展名几乎不相关。
  • 这与硒无关。

标签: java pdf selenium inputstream fileutils


【解决方案1】:

对于下载文件,也许你可以尝试这样的事情:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

public final class FileDownloader {

    private FileDownloader(){}

    public static void main(String args[]) throws IOException{
        download("http://pdfobject.com/pdf/sample.pdf", new File("sample.pdf"));
    }

    public static void download(final String url, final File destination) throws IOException {
        final URLConnection connection = new URL(url).openConnection();
        connection.setConnectTimeout(60000);
        connection.setReadTimeout(60000);
        connection.addRequestProperty("User-Agent", "Mozilla/5.0");
        final FileOutputStream output = new FileOutputStream(destination, false);
        final byte[] buffer = new byte[2048];
        int read;
        final InputStream input = connection.getInputStream();
        while((read = input.read(buffer)) > -1)
            output.write(buffer, 0, read);
        output.flush();
        output.close();
        input.close();
    }
}

【讨论】:

  • +1 非常感谢...我不知道这种方法,但是它给出了与其他方法相同类型的错误:although the file gets saved, is is damaged and could not be opened
  • 这很奇怪,因为它对我有用:puu.sh/4N0S6.png 也许您的 PDF 阅读器已损坏。
  • 您很可能是对的...请您包括import ... 行...也许我混淆了一些东西谢谢
  • 这很奇怪......我以为我得到了错误的导入......但相反我的导入没问题......而且Adobe阅读器也很好......我不知道为什么它不会打开它
  • @CHEBURASHKA 再次测试了这两种方法,都对我有用。请注意,如果您使用的是download(),它可能会附加字节,请尝试使用download2()
【解决方案2】:

让我给你一个更简短的解决方案,它带有一个名为 JSoup 的库,BalusC 经常在他的回答中使用它。

//Get the response
Response response=Jsoup.connect(location).ignoreContentType(true).execute();

//Save the file 
FileOutputStream out = new FileOutputStream(new File(outputFolder + name));
out.write(response.bodyAsBytes());
out.close();

嗯,你现在一定已经猜到了,response.body() 是 pdf 的位置。您可以使用这段代码下载任何二进制文件。

【讨论】:

  • 非常感谢。我会试试这个解决方案 +50
猜你喜欢
  • 2016-07-26
  • 1970-01-01
  • 2013-05-24
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
  • 2011-11-05
  • 2010-10-03
相关资源
最近更新 更多