Я использую диаграммы Google в отчетах (https://developers.google.com/chart/) и создаю PDF-файлы этих HTML-файлов, используя следующий код:
public FileResult DownloadReport(string viewName, string fileName, MpReportType type, int id = 0, DateRangeType? dateRangeType = null)
{
const string CONTAINER = "#reportContainer";
var model = GetModel(type, id, true, dateRangeType);
return DownloadReportInternal(viewName, fileName, model, CONTAINER);
}
private FileResult DownloadReportInternal(string viewName, string fileName, ReportGeneratorModel model, string container = "#reportContainer")
{
var htmlToConvert = GetHtmlFromView(viewName, model);
var hiddenElements = new string[] { ".reportHiddenElement" };
var pdfStream = ConvertHtmlToPdf(htmlToConvert, container, hiddenElements);
using (var ms = new MemoryStream())
{
byte[] buffer = new byte[16 * 1024];
int read;
while ((read = pdfStream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
var pdfBytes = ms.ToArray();
FileResult fileResult = new FileContentResult(pdfBytes, "application/pdf");
fileResult.FileDownloadName = fileName;
return fileResult;
}
}
protected string RenderViewAsString(string viewName, object model)
{
StringWriter stringWriter = new StringWriter();
ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, null);
ViewContext viewContext = new ViewContext(
ControllerContext,
viewResult.View,
new ViewDataDictionary(model),
new TempDataDictionary(),
stringWriter);
viewResult.View.Render(viewContext, stringWriter);
return stringWriter.ToString();
}
Я звоню DownloadReport from Views.
это часть View, которая содержит сечение диаграммы
<div class="ring-chart__chart" id="cumulativeExpenseSummaryChart"></div>
, и это функция вызова диаграммы в js:
var drawCharts = function() {
@if (Model.ComprehensiveCashflowTrack.ExpensePieChart != null)
{
var chart = Model.ComprehensiveCashflowTrack.ExpensePieChart;
<text>
var data = google.visualization.arrayToDataTable([
['@chart.Name', '@chart.Description']
@foreach (var item in chart.Items)
{
<text>, ['@item.Name', @item.Value]</text>
}
]);
//DrawCashflowRingChart('Monthly Expense Summary', 'cumulativeExpenseSummaryChart', data);
drawNetCashflowPieChart('Monthly Expense Summary', 'cumulativeExpenseSummaryChart', data);
</text>
}
}
выпуск : диаграммы не загружаются в pdf-отчетах. они правильно отображаются на HTML-странице.