以下のコードは、FusionChartをSVG文字列に変更し、それをajax呼び出しでコントローラに渡す、 "export" liタグから開始されます。FileStreamResultがAJAX呼び出し後にPDFを保存することを要求していません
コントローラに衝突し、コードが最後まで実行され、アラートによって「成功」が表示されますが、pdfを保存するためのポップアップは表示されません。
私は...
アムを全体のHTML文字列をつかんで、メモ帳に入れて、それは必要がありますが、コントローラから実行し、保存したメッセージをポップアップする場合、単純に動作しませんよう、HTML、すべてのディスプレイとして保存しています私は何かを欠いている?または何かが間違っている、またはベストプラクティスではない何か?
私はjavascript関数を呼び出している次のことを持っている:
function svgString() {
var ChartSVG = new Array(10);
var text = document.createTextNode(savingsChart.getSVGString());
document.getElementById("msg").appendChild(text);
ChartSVG = chunkSubstr(document.getElementById("msg").innerHTML, 10);
var Details =
{
"fkiProjectID" : @Model.fkiProjectID,
"ChartSVG": ChartSVG
};
$.ajax({
url: '/Profile/ExportCombinedPDF',
data: JSON.stringify(Details),
type: 'POST',
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert("Success : " + data);
},
error: function(data){
alert("Error: " + data);
}
});
}
document.getElementById("export").addEventListener("click", svgString);
function chunkSubstr(str, size) {
var numChunks = Math.ceil(str.length/size),
chunks = new Array(size);
//alert(str.length);
for(var i = 0, o = 0; i < size; ++i, o += numChunks) {
chunks[i] = str.substring(o, o + numChunks);
//alert(o + " " + numChunks);
}
return chunks;
}
コントローラー:
public FileStreamResult ExportCombinedPDF(CalculatedOutputViewModel CVM)
{
List<PipelineDetails> PipeList = new List<PipelineDetails>();
ProjectManager PM = new ProjectManager();
PipeList = PM.GetPipelineList(CVM.fkiProjectID);
string webgridstyle = PM.Pipeline_HtmlForExport(CVM.fkiProjectID);
string ProjectHtml = PM.Project_HtmlForExport(CVM.fkiProjectID);
string chartcontent = ExportRotativaPDF2(CVM);
WebGrid grid = new WebGrid(source: PipeList, canPage: false, canSort: false);
string gridHtml = grid.GetHtml(tableStyle: "webGrid",
headerStyle: "webGridHeader",
alternatingRowStyle: "webGridAlt",
columns: grid.Columns(
grid.Column("NodeNumber", "Node Nr."),
grid.Column("Accumulated_Length", "Accumulated Length"),
grid.Column("Elevation", "Elevation"),
grid.Column("Pipe_Outside_Diameter", "Pipe Outside Diameter"),
grid.Column("Wall_Thickness", "Wall Thickness"),
grid.Column("Control_Point_Description", "Control Point Description"),
grid.Column("Control_Point_Size", "Control Point Size"))).ToString();
string exportData = String.Format("<html><body>{0}{1} <p style='page-break-after:always;'></p> {2} {3}</body></html>", "<style>" + webgridstyle + "</style>", ProjectHtml, gridHtml, chartcontent);
var bytes = System.Text.Encoding.UTF8.GetBytes(exportData);
using (var input = new MemoryStream(bytes))
{
var output = new MemoryStream();
var document = new iTextSharp.text.Document(PageSize.A4, 50, 50, 50, 50);
var writer = PdfWriter.GetInstance(document, output);
PdfPTable table = new PdfPTable(1);
table.HeaderRows = 1;
Font headerFont = FontFactory.GetFont("Verdana", 10);
Font rowfont = FontFactory.GetFont("Verdana", 10);
writer.CloseStream = false;
document.Open();
var xmlWorker = iTextSharp.tool.xml.XMLWorkerHelper.GetInstance();
xmlWorker.ParseXHtml(writer, document, input, System.Text.Encoding.UTF8);
document.Add(table);
document.Close();
output.Position = 0;
return File(output, "application/pdf", "Pipeline_Report.pdf");
//return new FileStreamResult(output, "application/pdf");
}
}
もし
ここ<li id="export" style="font-size:13px"><a onclick="svgString()">Rotativa Export</a></li>
は、AJAX呼び出しを行っている私のjavascriptのです誰も助けることができます、ありがとう!
http://stackoverflow.com/a/23797348/307976 – vtortola
ajaxは使用しないでください。 (ヒント:window.openメソッド) – Shyju
私が座っている問題は、Javascriptを使用してFusionChartをSVG文字列に変換する必要があることです。配列に)、私は私のコントローラからpdfにエクスポートする必要があるhtml文字列を構築するために呼び出す関数を持っています。私はこのChartSVG配列をコントローラに渡すことができますが、ajax呼び出しを使用しないと、これは素晴らしいことです。これが可能ならば? – AxleWack