2012-09-12 82 views
0

我需要使用從POST請求獲得的一些數據生成PDF文件。作爲對此請求的迴應,我想發送生成的PDF文件,爲此用戶應該將「文件保存爲」-dialog。使用POST數據即時下載生成的文件

這一切都應該在飛行中發生。我不想將PDF保存到磁盤並通過附加請求提供。它應該都發生在一個請求中。

但我不知道如何才能實現這樣的事情。如果我使用XMLHttRequest,我不能使「save-file-as」-dialog出現。另一方面,如果我使用表單,則無法發送POST數據,而無需一些URL加密開銷。

有沒有人有想法?

+0

在客戶端單獨使用JS來生成PDF可能是你的選擇嗎?這可能很有趣:http://stackoverflow.com/questions/742271/generating-pdf-files-with-javascript – sajawikio

+0

「URL加密開銷」......那是什麼? – hackattack

+0

如果不想使用該PDF JS庫,那麼暫時將其保存到服務器內存將是其他選項。這可以在你使用的任何服務器端語言的服務器端代碼中完成。但是仍然會有額外的請求開銷:(( - 我想你確實希望客戶端生成PDF,在這種情況下,我猜想JS庫或某些Flash事情都會起作用 – sajawikio

回答

0

最後,我用2個請求解決了它。第一個將所需的數據發送到服務器並從中創建PDF,然後返回臨時文件的ID。第二個下載pdf並刪除臨時文件。

0

我正在通過將數據從javascript生成的表單字段發佈到php來完成此操作。

var form = $('<form method="post" action="svgoutput/convert.php"> <input type="text" name="incomingSvgData" value="'+base64_encode(svgDataString)+'"><input type="submit" value="Submit Post"> </form> '); 
form[0].submit(); 

對於IE的形式是具有在DOM而提交。

PHP的身邊,我做我的生成和東西(SVG至PNG在這種情況下),並設置以下標題:

header("Content-Type: YOURMIMETYPE"); 
header("Content-Disposition: attachment; filename=YOURFILENAME.EXT"); 
echo YOURDATA; 

下載順利W/O甚至呈現出另存爲對話框,在短短一個職位。如果你需要另存爲只是打頭文件,就像這裏How to show 'Save as' dialog box using PHP for text files