将SVG图像提交给Servlet

时间:2012-07-19 21:55:17

标签: java jquery web-applications svg

我正在处理有关Java Web应用程序的一些报告。我的要求之一是能够将报告数据导出为PDF。这些报告由几个元素组成,主要是HTML表和SVG图表,由Highcharts提供。

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 个答案:

答案 0 :(得分:1)

如果您的表单正在使用POST操作,则数据不会被截断。

话虽如此,使用文本阵营发送二进制数据令人不安。我会尝试:

a)将其作为文件附件发送(但可能您的用户需要设置字段值)。

b)将其直接发送到您的服务器(例如,使用CURL),与HTML

分开

c)至少,继续使用隐藏字段,但至少使用带有数据的encode64。