2010-10-29 67 views
0

我有一個Web應用程序,可以在服務器上使用下面的Java代碼顯示一個生成的PDF文件,用戶生成PDF:使用PUT操作

@Path("MyDocument.pdf/") 
@GET 
@Produces({"application/pdf"}) 
public StreamingOutput getPDF() throws Exception { 
    return new StreamingOutput() { 
     public void write(OutputStream output) throws IOException, WebApplicationException { 
      try { 
       PdfGenerator generator = new PdfGenerator(getEntity()); 
       generator.generatePDF(output); 
      } catch (Exception e) { 
       logger.error("Error getting PDF file.", e); 
       throw new WebApplicationException(e); 
      } 
     } 
    }; 
} 

這段代碼使用的事實,即我只需要從前端獲得大量數據以生成PDF,因此可以使用GET功能輕鬆完成。

但是,我現在想要以更加動態的方式返回PDF,並且需要從前端獲得更多信息才能生成PDF。在其他領域,我送類似的數據量和使用PUT和@FormParams它堅持到數據存儲,如:

@PUT 
@Consumes({"application/x-www-form-urlencoded"}) 
public void put(@FormParam("name") String name, 
       @FormParam("details") String details, 
       @FormParam("moreDetails") String moreDetails... 

因此,由於數據量的我需要從通前端,我不能只使用查詢參數使用GET函數。

我在前端使用Dojo,所有的dojo交互真的不知道如何處理從PUT操作返回的PDF。

我想不必在兩步驟中執行此操作(堅持數據中發送的數據,然後請求PDF),因爲PDF在這種用例中更加「短暫」,而且我不'不希望數據佔用我數據存儲空間。

有沒有辦法做到這一點,或者我在想所有的事情都是錯的?

謝謝。

回答

0

我不太明白你需要完成什麼 - 看起來你想提交一些數據來堅持它,然後返回PDF作爲結果?這應該是直截了當的,不需要2步,只需提交,就提交保存數​​據並返回PDF。 這是你的問題?你能澄清嗎?

P.S. 好吧,你需要做在你的servlet如下:

response.setHeader( 「內容處置」, 「附件;文件名=」 + 「爲例.pdf」);

response.setContentType(「application/pdf」);

設置響應的「內容長度」,否則Acrobat Reader插件可能無法正常工作,例如: response.setContentLength(bos.size());

如果你在JSP中提供的輸出,你可以這樣做:

<%@頁面的contentType = 「應用程序/ PDF」 %>

+0

爲了澄清,這就是我想要做的事。但是,根據我的第一個請求,除了查詢參數中的內容外,我不會發布任何數據,因此它只是訪問一個URL,並讓瀏覽器處理它返回PDF的事實。使用PUT(或POST),我該如何處理PDF的返回類型? – MikeTheReader 2010-10-29 20:06:51

+0

我有後端正確生成PDF,並且它回到了前端。我遇到的困難是通過JavaScript處理它。通常,當我執行POST或PUT(使用dojo.xhr *命令)時,我得到一個具有text或xml或JSON的響應。 Dojo處理這件事,並給我一個我可以做的事情。使用PDF,我得到的處理答覆錯誤不是爲PDF定義的。查看Dojo文檔,沒有將響應處理爲PDF的選項。 – MikeTheReader 2010-10-29 20:22:11

+0

你可以使用dojo.io.bind,你可以在這裏閱讀更多:http://dojo-toolkit.33424.n3.nabble.com/export-table-data-to-save-in-excel-format-td168638。 html和這裏http://o.dojotoolkit.org/forum/support/general-support/can-io-bind-handle-mimetypes-application-vnd-ms-excel。它是關於excel文件,只需將文件類型更改爲pdf – 2010-10-29 20:48:32