>

보고서에 Google 차트를 사용하고 있습니다 ( https://developers.google.com/chart/ ) 아래 코드를 사용하여 이러한 html 파일의 PDF 파일을 생성 중입니다.

     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를 호출합니다.

이것은 차트 섹션을 포함하는 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

    Google 시각화로드 방식을 변경 한 후 일부 PDF에서 작동합니다. document.ready ()에 차트를로드하는 대신 다음과 같이하십시오 :

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

    이것을 다음과 같이 변경했습니다 :

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

    일부 pdf 파일에서 성공하지 못했기 때문에 답변으로 간주해서는 안됩니다.

  • 이전 javascript - typeerror - webrtc 및 react에 대한 모든 적절한 바인딩 후에도 정의되지 않은 'setstate'속성을 읽을 수 없습니다
  • 다음 sql - 비교 - 트리거로 삽입 된 새로운 값