我正在编写一些关于 Java Web 应用程序的报告。我的要求之一是能够将报告数据导出为 PDF。报告由几个元素组成,主要是由 Highcharts 提供的 HTML 表格和 SVG 图表。
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 元素编码为 Data URI,但我想它也不会阻止截断,尽管它在大多数情况下会产生更短的字符串。
有谁知道将 SVG 数据传输回服务器的方法?(最好也允许一些其他参数)
谢谢