私はJavaWebアプリケーションに関するいくつかのレポートに取り組んでいます。私が持っている要件の1つは、レポートデータをPDFとしてエクスポートできるようにすることです。レポートはいくつかの要素で構成されており、主にHTMLテーブルとHighchartsの提供によるSVGチャートです。
HighchartsにはグラフィックをPDFにエクスポートする組み込み関数がありますが、他のHTMLデータも含むドキュメントが必要なので、独自のコードを作成する以外に選択肢はありません。Highchartsグラフィックはクライアント側で作成されるため、PDFドキュメントに画像を含めることができるようにするには、SVG出力をサーバーに送信する必要があります。
私の最初の、おそらく素朴なアプローチは、次のような非表示の入力を持つフォームを作成することでした。
<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データをサーバーに転送する方法を知っている人はいますか?(できれば、他のいくつかのパラメーターも許可します)
ありがとう