【问题标题】:Generate PDF with Telerik Reporting with .NET Core使用 .NET Core 使用 Telerik Reporting 生成 PDF
【发布时间】:2019-10-11 23:26:00
【问题描述】:

目前,我们希望实现一个带有 Telerik 报告功能的 PDF 生成器。

我们希望使用我们自己的定制设计器模板创建 PDF 并为其提供数据模型。

以下代码显示了将导出带有模板的 PDF 文件的路径:“confirmation.trdp”(见附件)。

这是我为测试目的而创建的一个虚拟文件。

这是我的源代码:

 public IActionResult Pdf()
 {
        // mock data
        var dataModel = new MockData
        {
            Name = "Terence",
            Amount = 1000
        };
        var dataSource = new Telerik.Reporting.ObjectDataSource
        {
            DataSource = dataModel
        };


        var reportProcessor = new Telerik.Reporting.Processing.ReportProcessor();
        var reportSource = new Telerik.Reporting.UriReportSource
        {
            Uri = "PDF/confirmation.trdp"
        };
        //reportSource.Parameters


        var result = reportProcessor.RenderReport("PDF", reportSource, null);
        var output = result.DocumentBytes;

        return File(output, "application/pdf");
  }

这是我从 Telerik Report Designer 创建的模板

这是我的问题:

如何将文本框与 pdf 文件中的数据模型绑定?以及如何为此配置 .trdp 模板?

【问题讨论】:

  • 您想要将报告导出为 PDF 的事实似乎与您提出的问题无关,我建议您将这部分从您的问题中删除以简化它。另外,一次只关注一个问题,如果您尝试将三个问题合二为一,您的问题很可能会被关闭。..
  • @yms 听起来不错。我将专注于最重要的一项。

标签: c# pdf asp.net-core pdf-generation telerik-reporting


【解决方案1】:

您需要将 *.trdp 文件解析为 Telerik Report 对象。

var reportProcessor = new Telerik.Reporting.Processing.ReportProcessor();
var deviceInfo = new System.Collections.Hashtable();

var reportPackager = new ReportPackager();
Report report;
InstanceReportSource instanceReportSource = new InstanceReportSource();
using (var sourceStream = System.IO.File.OpenRead(path))
{
   report = (Report)reportPackager.UnpackageDocument(sourceStream);
}

之后,您可以更改报告数据源。例如(使用 JsonDataSource):

                var ds = new JsonDataSource
                {
                    DataSelector = "$",
                    Source = JsonConvert.SerializeObject(model,
                    new JsonSerializerSettings
                    {
                        ContractResolver = new CamelCasePropertyNamesContractResolver()
                    })
                };

                report.DataSource = ds;

                instanceReportSource.ReportDocument = report;

                Telerik.Reporting.Processing.RenderingResult result = reportProcessor.RenderReport("PDF", instanceReportSource, deviceInfo);

如果您在 .NET Core 中使用 Telerik Reports,请不要忘记添加所有 NuGet 依赖项。 https://docs.telerik.com/reporting/use-reports-in-net-core-apps

【讨论】:

    猜你喜欢
    • 2018-08-14
    • 2017-01-01
    • 2018-08-20
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多