我有一個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在這種用例中更加「短暫」,而且我不'不希望數據佔用我數據存儲空間。
有沒有辦法做到這一點,或者我在想所有的事情都是錯的?
謝謝。
爲了澄清,這就是我想要做的事。但是,根據我的第一個請求,除了查詢參數中的內容外,我不會發布任何數據,因此它只是訪問一個URL,並讓瀏覽器處理它返回PDF的事實。使用PUT(或POST),我該如何處理PDF的返回類型? – MikeTheReader 2010-10-29 20:06:51
我有後端正確生成PDF,並且它回到了前端。我遇到的困難是通過JavaScript處理它。通常,當我執行POST或PUT(使用dojo.xhr *命令)時,我得到一個具有text或xml或JSON的響應。 Dojo處理這件事,並給我一個我可以做的事情。使用PDF,我得到的處理答覆錯誤不是爲PDF定義的。查看Dojo文檔,沒有將響應處理爲PDF的選項。 – MikeTheReader 2010-10-29 20:22:11
你可以使用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