2012-07-19 89 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