2016-11-10 9 views
1

次のコードはエラーなしで正常に動作します。コードで指定された名前のファイルをダウンロードできますが、問題は印刷されていませんファイルを開くと、ファイルが破損しているとエラーが表示されます。私はちょうどどこかにファイルを保存している間、私は内容が適切なファイルを取得します。 UIからspring mvcとapacheを使用してUIから空のpdfファイルをダウンロードする

コントローラーで

var jsonStrToSend = JSON.stringify(jsonObjToSend); 
jsonStrToSend = jsonStrToSend.replace(/"/g, """); 
var url = '/'+appPath+'/reportgeneration' ; 
var $form = $('<form enctype=\'application/json\' action="' + url + '" method="post">').append($('<input type="hidden" name="data" id="data" value="' + jsonStrToSend + '" />')); 
$form.appendTo("body").submit(); 

@RequestMapping(value = "/reportgeneration", method = RequestMethod.POST) 
      public @ResponseBody void reportgeneration(HttpServletRequest request, 
       HttpServletResponse response){ 
      Map returnMapMessage = new HashMap(); 
      int resultData =0; 
      HttpSession httpsessionObj = request.getSession(false); 
      try{ 
       PDDocument doc = new PDDocument(); 
       PDPage intro_page = new PDPage(); 

       doc.addPage(intro_page); 

       PDPageContentStream contentStream_itro = 
         new PDPageContentStream(doc, intro_page); 

       //Some stuff....... 

       String fileName = reportName+"_"+tempDate.getDate()+"-"+tempDate.getMonth()+"-"+tempDate.getYear()+" "+tempDate.getHours()+tempDate.getMinutes()+".pdf"; 
       //doc.save("/test/webapp/reports/"+fileName); 
       response.setContentType("application/pdf"); 
       PDStream ps=new PDStream(doc); 
       InputStream is=ps.createInputStream(); 
       String headerKey = "Content-Disposition"; 
       String headerValue = String.format("attachment; filename=\"%s\"", fileName); 
       response.setHeader("Expires:", "0"); // eliminates browser caching 
       response.setHeader(headerKey, headerValue); 
       org.apache.commons.io.IOUtils.copy(is, response.getOutputStream()); 
       response.flushBuffer(); 
       is.close(); 
       doc.close(); 
+0

生成されたpdfは送信せず、新しく生成された空のpdfストリームオブジェクトの内容のみを送信します。 – mkl

+0

私はあなたを正しく理解していませんでした。あなたはそれにデータを持っているので、私はそれがすべて間違っているのですが、pdstreamオブジェクトについて取っていますか?私が思うには、私はストリームオブジェクトと私にファイルを与えるべきファイルヘッダを送信していますが、私が間違っている何かをしています – SiddP

+0

* "pdstreamオブジェクトはデータを持っています" * - 私は 'PDStream 'オブジェクトではありませんが、データはありません。あなたは空の蒸気としてそれを作り、内容を追加しませんでした。したがって、 'InputStream'を取得すると、そのストリームはほぼ空になります。特にそれはあなたが送るpdfの部分を含んでいません。 – mkl

答えて

1

私はどこでもファイルを格納していなかったとして、私は、必要があるとないと感じたように私は)(doc.saveを逃しました。ドライブの中で。しかし、以下のコードはうまく動作します。

ByteArrayOutputStream output = new ByteArrayOutputStream(); 
doc.save(output); 
doc.close(); 
response.addHeader("Content-Type", "application/force-download"); 
response.addHeader("Content-Disposition", "attachment; filename=\""+fileName+"\""); 
response.getOutputStream().write(output.toByteArray()); 
関連する問題