Отчеты Google не отображаются в отчете PDF в Mvc c # - PullRequest
0 голосов
/ 08 марта 2019

Я использую диаграммы 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-странице.

1 Ответ

0 голосов
/ 12 марта 2019

Это работает для некоторых PDF-файлов после того, как я изменил способ загрузки визуализации Google. вместо загрузки диаграмм в document.ready () , как это:

  google.charts.load('current',
      {
         callback: drawCharts,
         packages: ['corechart']
      });

Я изменил это на:

google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawCharts);

Он не должен рассматриваться как ответ, поскольку в некоторых из PDF-файлов он не был успешным.

...