【问题标题】:Generate charts, graphs in PDF using iTextSharp in ASP.NET Core在 ASP.NET Core 中使用 iTextSharp 在 PDF 中生成图表、图形
【发布时间】:2020-12-01 19:46:19
【问题描述】:

我需要在 ASP.NET Core 3.1 的服务器端生成一个 PDF 文档。我正在使用 iTextSharp 生成 PDF。我可以使用 iTextSharp 在 PDF 中创建数据表。但是,我找不到使用相同库将图表或图形添加到 PDF 中的解决方案。

我使用过 ChartJS 和其他类似的包,但它们都没有让我在后端创建图表并将其创建为嵌入 PDF 中的图像。

【问题讨论】:

  • 您可能需要在 ASP.NET Core 中创建图表控件,然后导出为 PDF。参考 - c-sharpcorner.com/UploadFile/raj1979/…
  • 有像image-charts.com 这样的网络服务,您可以请求渲染图表图像,然后将它们嵌入到 PDF 中
  • 图片图表看起来像是按月付费的订阅服务。
  • @SSD:ASPNET 核心中没有为图表控件所基于的 system.web.datavisualization 提供程序集。

标签: asp.net-core .net-core charts itext pdf-generation


【解决方案1】:

2020 年 8 月 12 日更新

创建excel,然后转换为pdf。
Essential XlsIO 是一个原生 .NET 类库,可用于创建和修改 Microsoft Excel 文件。

XlsIO 允许您将整个工作簿或单个工作表转换为 PDF 文档。

    [Route("/chart")]
    public IActionResult CreateChart()
    {
        using (ExcelEngine excelEngine = new ExcelEngine())
        {
            IApplication application = excelEngine.Excel;
            application.DefaultVersion = ExcelVersion.Excel2013;
            IWorkbook workbook = application.Workbooks.Create(1);

            IWorksheet sheet = workbook.Worksheets[0];

            //Inserts the sample data for the chart
            sheet.Range["A1"].Text = "Month";
            sheet.Range["B1"].Text = "Product A";
            sheet.Range["C1"].Text = "Product B";

            //Months
            sheet.Range["A2"].Text = "Jan";
            sheet.Range["A3"].Text = "Feb";
            sheet.Range["A4"].Text = "Mar";
            sheet.Range["A5"].Text = "Apr";
            sheet.Range["A6"].Text = "May";

            //Create a random Data
            Random r = new Random();
            for (int i = 2; i <= 6; i++)
            {
                for (int j = 2; j <= 3; j++)
                {
                    sheet.Range[i, j].Number = r.Next(0, 500);
                }
            }
            IChartShape chart = sheet.Charts.Add();

            //Set chart type
            chart.ChartType = ExcelChartType.Line;

            //Set Chart Title
            chart.ChartTitle = "Product Sales comparison";

            //Set first serie
            IChartSerie productA = chart.Series.Add("ProductA");
            productA.Values = sheet.Range["B2:B6"];
            productA.CategoryLabels = sheet.Range["A2:A6"];

            //Set second serie
            IChartSerie productB = chart.Series.Add("ProductB");
            productB.Values = sheet.Range["C2:C6"];
            productB.CategoryLabels = sheet.Range["A2:A6"];

            //Saving the workbook as stream
            //FileStream stream = new FileStream("Chart.xlsx", FileMode.Create, FileAccess.ReadWrite);
            //workbook.SaveAs(stream);

            //Initialize XlsIO renderer.
            XlsIORenderer renderer = new XlsIORenderer();

            //Convert Excel document into PDF document 
            Syncfusion.Pdf.PdfDocument pdfDocument = renderer.ConvertToPDF(sheet);

            MemoryStream stream = new MemoryStream();
            pdfDocument.Save(stream);

            stream.Flush(); //Always catches me out
            stream.Position = 0; //Not sure if this is required
            //stream.Dispose();

            return File(stream, "application/pdf", "chart.pdf");
        }

    }



在 ASPNET Core 3.1 中使用 iTextsharp 生成带图像的 PDF

这里是action的代码。

    [Route("/pdf")]
    public FileStreamResult GeneratePDFwithImage()
    {
        var imagepath = System.IO.Path.Combine(_env.WebRootPath, "/images") + "/test.png";

        Document doc = new Document();
        MemoryStream stream = new MemoryStream();

        PdfWriter pdfWriter = PdfWriter.GetInstance(doc, stream);
        pdfWriter.CloseStream = false;

        doc.Open();
        doc.Add(new Paragraph("Hello World"));
        Image png = Image.GetInstance(imagepath);
        doc.Add(png);
       
        doc.Close();

        stream.Flush(); //Always catches me out
        stream.Position = 0; //Not sure if this is required

        return File(stream, "application/pdf", "HelloWorld.pdf");

    }

结果测试

【讨论】:

  • 在这种情况下,我没有静态图像。我需要从 dB 生成条形图,然后写入 PDF。
  • 数据库的来源日期是多少?在 asp.net core 中很难找到图表到图像的生成器。
  • 用户提交一组表单数据,查询 dB 并带回结果以 pdf 形式呈现。我希望有一种直接的方法可以在 pdf 中呈现图形。
  • 我认为 Syncfusion 不是免费版本,而是商业许可
  • 是的,这是试用版。付钱总比没有好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 2013-07-03
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 2014-01-01
相关资源
最近更新 更多