HtmlUnit - 提交并下载PDF文件

时间:2015-10-17 16:08:03

标签: java html pdf htmlunit

我的问题是: 当使用元素<input type="submit" name="method" value="Save">提交表单时,这会打开一个dialoge open-save pdf文件。 使用HtmlUnit(版本2.8)我无法下载文件,因为响应返回了下一个html页面的内容而不是pdf文件。

我的Web客户端的配置如下:

private WebClient getWebClient() {
    WebClient webClient = new WebClient(BrowserVersion.FIREFOX_38);
    webClient.getOptions().setThrowExceptionOnScriptError(false);
    webClient.getOptions().setJavaScriptEnabled(true);
    webClient.getOptions().setRedirectEnabled(true);
    webClient.getOptions().setCssEnabled(false);

    webClient.setAjaxController(new NicelyResynchronizingAjaxController());
    webClient.getCookieManager().setCookiesEnabled(true);
    webClient.waitForBackgroundJavaScript(4000);
    return webClient;
}

然后,用于提交表单的代码是:

List<HtmlElement> elements = (List<HtmlElement>) page.getByXPath("//input[@type='submit' and @value='Save']");
HtmlElement buttonDownload = elements.get(0);

最后,用于下载pdf文件的方法是:

public static void downloadByClickOnButton(HtmlElement buttonDownload) throws Exception {
    HtmlPage page = buttonDownload.click();
    WebResponse response = page.getWebResponse();

    InputStream inputStream = null;
    OutputStream outputStream = null;

    try {
        inputStream = response.getContentAsStream();
        outputStream = new FileOutputStream(new File("/path/to/save/file/test_file.pdf"));

        int read = 0;
        byte[] bytes = new byte[1024];

        while ((read = inputStream.read(bytes)) != -1) {
            outputStream.write(bytes, 0, read);
        }

        System.out.println("Done!");

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (outputStream != null) {
            try {
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

}

代码有效,但保存的文件是页面的html文本,而不是pdf文件。

有什么问题?使用htmlunit可以与open-save dialoge进行交互吗?请帮帮我!! : - )

这是表格:

<form name="ViewDocumentsFB" method="post" action="/Document/ViewDocument.do">
<input type="hidden" name="idRequestDocument" value="923390829">
<tr>
    <td><input type="submit" name="metodo" value="Open"></td>
    <td><input type="submit" name="metodo" value="Save"></td>
</tr>

如果我手动发送此请求: http://----------/Document/ViewDocument.do 它没有打开一个open-save dialoge并重定向到其他页面,为什么?

感谢提前。

0 个答案:

没有答案