0

我正在使用带有 javascript 和 jquery 的 Phonegap。我创建了一个 java servlet,它返回一个 pdf 文件。我可以在浏览器中正确获取 de 文件,但不能在 Phonegap 上。

我的代码是这样的(javascript):

$.ajax({
    type: "GET",
    url: "http://x.x.x.x:xxxx/MyApp/PDF",
    success: function(data, textStatus, request) {
        alert("pdf OK");
        window.open(data, "_system");
    },
    error: function(data, textStatus, request) {
        alert("pdr error");
    }

这里是servlet(这在浏览器中可以正常工作):

protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
try {
        // Create PDF (this works fine)
    String ruta = getServletContext().getRealPath(reportTemplateUrl);
    InputStream resourceAsStream = new FileInputStream(ruta);
    jasperDesign = JRXmlLoader.load(resourceAsStream);
    jasperReport = JasperCompileManager.compileReport(jasperDesign);
    jasperPrint = JasperFillManager.fillReport(jasperReport, null, new JRBeanCollectionDataSource(findReportData(name)));

    File pdf = new File("output.pdf");
    JasperExportManager.exportReportToPdfStream(jasperPrint, new FileOutputStream(pdf));

    // Send PDF
    response.setContentType("application/pdf");
    response.addHeader("Content-Disposition", "attachment; filename=output.pdf");
    response.setContentLength((int) pdf.length());
    InputStream fileInputStream = new FileInputStream(pdf);
    OutputStream responseOutputStream = response.getOutputStream();
    int bytes;
    while ((bytes = fileInputStream.read()) != -1) {
        responseOutputStream.write(bytes);
    }
    System.out.println("CREATED!");

} catch (JRException e) {
    e.printStackTrace();
}

此代码在带有 Phonegap 的 iPad 上运行,我总是收到 OK 警报。从 iPad 的浏览器中,我可以下载并阅读 pdf(我将 URL 作为普通页面放在浏览器中),一切正常。

我认为问题是来自javascript的“数据”,我不知道我是否需要先保存文件或如何显示它......

是的,我需要使用 servlet 和 ajax,PDF 是动态的。我不介意用内部或外部浏览器打开它,但我需要看到它。

谢谢!:)

4

1 回答 1

0

好吧,我通过在新浏览器上打开 url 的 javascript 调用 GET 解决了这个问题:

window.open("http://.../PDF?id=id&name=name&...", "_blank");

没有ajax。

谢谢大家

于 2013-10-02T11:07:57.113 回答