使用Javascript和Servlet显示PDF

时间:2013-10-01 14:15:48

标签: java javascript jquery cordova

我正在使用带有javascript和jquery的Phonegap。我创建了一个java servlet,它返回一个pdf文件。我可以在浏览器中正确获取文件,但我不能在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是动态的。我不介意用内部或外部浏览器打开它,但我需要看到它。

谢谢! :)

1 个答案:

答案 0 :(得分:0)

好吧,我解决了这个问题,在javascript打开新浏览器上的网址时进行GET调用:

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

没有ajax。

谢谢大家