2

私は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データをサーバーに転送する方法を知っている人はいますか?(できれば、他のいくつかのパラメーターも許可します)

ありがとう

4

1 に答える 1

2

フォームがPOSTアクションを使用している場合、データは切り捨てられません。

そうは言っても、テキストキャンプを使用してバイナリデータを送信するのは不安です。私はどちらかを試してみます:

a)ファイルの添付ファイルとして送信します(ただし、おそらくユーザーはフィールド値を設定する必要があります)。

b)HTMLとは別に、サーバーに直接送信します(たとえば、CURLを使用)。

c)少なくとも、非表示フィールドを使用し続けますが、少なくともデータでencode64を使用します。

于 2012-07-19T22:04:46.300 に答える