0

PDFを生成するWebサービスがあります。私のGAEアプリケーションにはボタンがあり、クリックするとajaxの機能を使用します。

$('#test').click(function(){
        $.ajax({
            url: 'provaws.do',
            type: 'get',
            dataType: 'html',
                    success : function(data) {
                    }
        });
    });

これは、UrlFetch を使用して ws を呼び出す Java のメソッドです。

    @RequestMapping(method = RequestMethod.GET, value = PROVAWS_URL)
public void prova(HttpServletRequest httpRequest, HttpServletResponse httpResponse, HttpSession httpSession) throws IOException{
    try {
        URL url = new URL("http://XXXXX/sap/bc/zcl_getpdf/vbeln/yyyyyy");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestProperty("Authorization","Basic " + Base64.encodeBase64String(("username:password").getBytes()));
        connection.setConnectTimeout(60000);
        if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
            // OK
            ByteArrayOutputStream bais = new ByteArrayOutputStream();
            InputStream is = null;
            try {
              is = connection.getInputStream();
              byte[] byteChunk = new byte[4096];
              int n;

              while ( (n = is.read(byteChunk)) > 0 ) {
                bais.write(byteChunk, 0, n);
              }
            }
            catch (IOException e) {

            }
            finally {
              if (is != null) { is.close(); }
            }
            httpResponse.setContentType("application/pdf");
            httpResponse.setHeader("content-disposition","attachment; filename=yyyyy.pdf");             
            httpResponse.getOutputStream().write(bais.toString().getBytes("UTF-8"));
            httpResponse.getOutputStream().flush();         
        }
....
}

Firebug を使用すると、応答が表示されます。

%PDF-1.3
%âãÏÓ
2 0 obj
<<
/Type /FontDescriptor
/Ascent 720
/CapHeight 660
/Descent -270
/Flags 32
/FontBBox [-177 -269 1123 866]
/FontName /Helvetica-Bold
/ItalicAngle 0
....

PDFを表示するには、ajaxの関数に何を設定する必要がありますか?

前もって感謝します

4

1 に答える 1

0

私はJavaをよく知りませんが、私の理解ではあなたのメカニズムは正しくないかもしれません.

ここに私の修正があります:

ファイルをストリームで送信する代わりに、サーバー側のコード (JAVA) はバックエンドで pdf を生成し、ファイルをファイル システムに配置してから、ファイルの URI を Ajax 応答に返す必要があります。

Ajax コードの場合、サーバーから URL を取得し、新しい URL を DOM に表示します。その後、ユーザーはこのリンクをたどって PDF を読んだりダウンロードしたりできます。

サイドノート:

さらに、Ajax でデータをストリーミングする方法があることを確認しましたが、jQueryajax()では処理できません。しかし、PDF ファイルのレンダリングでは、ストリーミングはやり過ぎだと思います。参照: jquery ajax、ストリームをインクリメンタルに読み取りますか? http://ajaxpatterns.org/HTTP_Streaming#In_A_Blink *

于 2013-03-22T12:14:14.910 に答える