2011-10-02 42 views
1

我的項目需要我添加一個「SaveAs PDF」功能。我一直在尋找一種純粹的JavaScript解決方案,它只是在客戶端完成這項工作,然而,我們被告知它至少現在不可實施。另存爲PDF格式:推薦一個服務器解決方案來接收來自客戶端的原始數據並將PDF發回客戶端?

jsPDF目前仍然是一個有限的版本,不支持圖形和其他。因此,現在我正在尋找一種穩定的開放式免費解決方案來設置服務器Web服務,該服務從客戶端接收數據並將生成的PDF文件或鏈接發回給用戶以保存到其磁盤。

來自客戶端的數據由客戶端用戶確定,這意味着不是整個頁面。用戶可以選擇將地圖,表格或全部文件保存爲PDF文件。

有什麼建議嗎?

PS:在Windows環境

回答

2

你可能會檢查出ReportLab Toolkit - 它包括一個開放源碼Python庫創建PDF。 (你沒有指定你想要的服務器端語言,但是Python得到了廣泛的支持。)

如果你需要一些可以用Javascript編碼的東西,一個選項可能是PhantomJS。該工具允許您從命令行運行無頭Webkit瀏覽器,並且可以將網頁呈現並保存爲PDF。 Slippy使用這種方法,因此您可能能夠從該項目獲取示例代碼。在PhantomJS中編寫PDF創建腳本的速度可能比Python快得多,但它可能會慢得多(它必須啓動Webkit實例),並且服務器安裝可能會很複雜。

1

我已經在JavaScript中創建此功能,發送iframe廣告服務器:

function download(url, datas){ 
    if(url && datas){ 
     var inputs = '', value, 
      iframe = '<iframe name="iframeDownload" id="iframeDownload" width=0 height=0></iframe>'; 

     $(iframe).appendTo('body'); 

     datas.forEach(function(data){ 
      name = encodeURI(data.get('name')); 
      value = encodeURI(data.get('value')); 

      inputs+='<input name="'+name+'" value="'+value+'"/>'; 
     }); 

     $('<form action="'+url+'" method="post" target="iframeDownload">'+inputs+'</form>').appendTo('body').submit().remove(); // .appendTo and remove() are needed for firefox 

     $(iframe).remove(); 
    }; 
}; 

我編碼輸入名稱和值能夠發送數據。 在我的服務器上,我使用的是PHP,所以要解碼這個,你需要:rawurldecode。如果你定義的輸入爲「文件名」,並命名爲「文件」,你可以這樣寫:

$fileName = rawurldecode($_POST['fileName']); 
$file = rawurldecode($_POST['file']); 

比後,強制下載,您需要發送的校正頭。我使用這個功能:

function download($filename, $file) { 
    header('Content-disposition: attachment; filename="'.$filename.'"'); 
    header('Content-Type: application/force-download'); 
    header('Content-Length: '. filesize($file)); 
    readfile($file); 
} 

如果你不需要,因爲它在服務器端創建從JavaScript發送的文件,只是你的文件的路徑添加到下載功能。


如果您使用的是PHP,您可以使用fpdf來生成pdf。

相關問題