0

私はJavascriptとjqueryでPhonegapを使用しています。私はJavaサーブレットを作成しました.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");
    }

そして、ここにサーブレット (これはブラウザから正常に動作します):

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();
}

このコードは iPad で Phonegap を使用して実行されており、常に OK アラートが表示されます。iPadのブラウザからpdfをダウンロードして読むことができ(URLを通常のページとしてブラウザに入れました)、すべて問題ありません。

問題は「データ」だと思います.javascriptから、最初にファイルを保存する必要があるかどうか、またはそれを表示する方法がわかりません...

はい、サーブレットと ajax を使用する必要があります。PDF は動的です。内部または外部ブラウザで開いてもかまいませんが、表示する必要があります。

ありがとう!:)

4

1 に答える 1

0

さて、私はこれを新しいブラウザでURLを開くjavascriptでGET呼び出しを行うことで解決しました:

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

アヤックスなし。

みんな、ありがとう

于 2013-10-02T11:07:57.113 に答える