2012-07-19 86 views
1

我正在研究Java Web應用程序的一些報告。我的要求之一是能夠將報告數據導出爲PDF。這些報告由幾個元素組成,主要是由Highcharts提供的HTML表格和SVG圖表。將SVG圖像提交給Servlet

Highcharts有一個內置的函數,可以將圖形導出爲PDF,但是我需要一個包含其他HTML數據的文檔,所以除了編寫我自己的代碼之外別無選擇。由於Highcharts圖形是在客戶端創建的,我需要將它們的SVG輸出提交給服務器,以便能夠將圖像包含在PDF文檔中。

我的第一個,也許是天真的,採取的做法是有一個隱藏的輸入,如形態:

<form id="fileExport" method="POST" action="servlet/FileExportServlet"> 
    <input type="hidden" id="svgParam" name="svgParam" /> 
</form> 

然後我會設置隱藏輸入的值,以圖形的SVG這樣的代碼:

$("div#getPDF").live("click", function() 
{ 
    //the chart svg data is inside a div with class highcharts-container 
    //I copy the svg to the hidden input that I will submit 
    $("#svgParam").val($(".highcharts-container").html()); 

    //submit the form with the hidden input 
    $("#fileExport").submit(); 
}); 

我面臨的問題是,顯然SVG數據對於隱藏輸入的值來說太大了,所以當它到達服務器時它會被截斷。我以這種方式提交表單,因爲我不想刷新頁面以便開始下載。

我在想,也許我可以將SVG元素編碼爲數據URI,但我想它也不會阻止截斷,儘管它大部分時間會產生更短的字符串。

有沒有人知道一種方法將SVG數據傳輸回服務器? (最好是允許一些其他參數也一樣)

感謝

回答

1

如果你的表格是使用POST操作,數據不會被截斷。

話雖如此,使用文本陣營發送二進制數據令人不安。我會嘗試:

a)發送它作爲文件附件(但可能你的用戶需要設置字段值)。

二)直接從你的HTML

C)至少,發送到您的服務器(例如,使用curl),分別,繼續使用隱藏域,但至少使用與數據encode64。

+0

謝謝,你是對的,數據不會因爲我使用POST操作而被截斷。看起來Eclipse調試器沒有顯示整個字符串,但數據本身已正確傳輸,所以我的問題在別處。 在我的情況a)和b)不可行,但我會按照您的建議對數據進行編碼。 – JayPea 2012-07-19 23:17:59