0

次の URL から PDF ファイルをダウンロードしようとしています: http://pdfobject.com/markup/examples/full-browser-window.html

Josh Mは、彼のコンピューターで動作する次のソリューションを提案しました。しかし、私はそれを機能させることができません。次のコードはファイルを宛先に保存しますが、ダウンロードされたファイルの重量はわずか 984 バイトです (通常は 18 Kb のはずです)。そのため、ファイルが破損しています。なぜこれが起こるのか、理由は考えられませんか?

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.nio.file.Files;
import java.nio.file.StandardOpenOption;

public final class FileDownloader {

    private FileDownloader(){}

    public static void main(String args[]) throws IOException{
        download("http://pdfobject.com/markup/examples/full-browser-window.html", new File("C:\\Users\\Owner\\Desktop\\temporary\\myFile.pdf"));
        download2("http://pdfobject.com/markup/examples/full-browser-window.html", new File("C:\\Users\\Owner\\Desktop\\temporary\\myFile2.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 ByteArrayOutputStream baos = new ByteArrayOutputStream();
        final byte[] buffer = new byte[2048];
        int read;
        final InputStream input = connection.getInputStream();
        while((read = input.read(buffer)) > -1)
            baos.write(buffer, 0, read);
        baos.flush();
        Files.write(destination.toPath(), baos.toByteArray(), StandardOpenOption.WRITE);
        input.close();
    }

    public static void download2(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();
    }
}
4

1 に答える 1

3

参照されている PDF を埋め込みオブジェクトとして含む.html URL をダウンロードしています。Java はブラウザーとは異なり、それを処理しないため、PDF ではなく HTML を保存します。中を見てください。あなたの支援のために、ここにそれがあります:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Embedding a PDF using static HTML markup: Full-browser window (100% width/height)</title>

<!-- This example created for PDFObject.com by Philip Hutchison (www.pipwerks.com) -->

<style type="text/css">
<!--

html {
   height: 100%;
}

body {
   margin: 0;
   padding: 0;
   height: 100%;
}

p {
   padding: 1em;
}

object {
   display: block;
}

-->
</style>

</head>

<body>

<object data="/pdf/sample.pdf#toolbar=1&amp;navpanes=0&amp;scrollbar=1&amp;page=1&amp;view=FitH" 
        type="application/pdf" 
        width="100%" 
        height="100%">

<p>It appears you don't have a PDF plugin for this browser. No biggie... you can <a href="/pdf/sample.pdf">click here to download the PDF file.</a></p>

</object>

</body>
</html>
于 2013-10-11T03:42:49.330 に答える