VS2019 สร้าง PDF ด้วย ReportViewerCore.NETCore

สร้างโปรเจ็กส์แบบ ASP.NET Core Web API

ติดตั้ง ReportViewerCore.NETCore

PM> Install-Package ReportViewerCore.NETCore -Version 15.1.15

สร้างโฟลเดอร์ Reports

Add Report ชื่อ Reports/Report0.rdlc

เพิ่ม API Controller ชื่อ Controllers/ValuesController.cs

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.Reporting.NETCore;

namespace WebApi5.Controllers
{
    [Route("[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        private readonly ILogger<ValuesController> _logger;
        private IWebHostEnvironment _env;

        public ValuesController(ILogger<ValuesController> logger
             , IWebHostEnvironment env)
        {
            _logger = logger;
            _env = env;
        }

        [HttpGet("{id}")]
        public string Get(int id)
        {
            string rootPath;
            if (!string.IsNullOrEmpty(_env.WebRootPath))
                rootPath = _env.WebRootPath;
            else
                rootPath = _env.ContentRootPath;
            _logger.LogInformation($"rootPath  = {rootPath}");

            LocalReport report = new LocalReport();
            report.ReportPath = $"{rootPath}\\Reports\\Report0.rdlc";

            byte[] pdf = report.Render("PDF");
            string pdfPathOP = System.IO.Path.Combine(rootPath, "reportOut.pdf");
            System.IO.File.WriteAllBytes(pdfPathOP, pdf);

            return "success";
        }
    }
}

ลองเรียก https://localhost:44395/values/5 จะได้ไฟล์ reportOut.pdf

ตัวอย่างการส่งค่าด้วย DataSet

ให้ add | new item | dataset ชื่อ DataSetTable1

ที่หน้า design ของ DataSetTable1 สร้างตาราง DataTable1 แล้วเพิ่มคอลัมน์ title, name

DataSetTable1 dsTable1 = new DataSetTable1();
DataRow row01 = dsTable1.DataTable1.NewRow();
row01["title"] = "Mr.";
row01["name"]  = "Jack";
dsTable1.DataTable1.Rows.Add(row01);

LocalReport localReport1 = new LocalReport();
localReport1.ReportPath = $"{rootPath}\\Reports\\Report1.rdlc";
localReport1.DataSources.Add(new ReportDataSource("DataSetTable1", dsTable1.DataTable1));

กรณีที่ Report มีมากกว่า 1 DataSet

ถ้าลากฟิลด์มาวางจะได้

=Fields!first_name.Value

ให้ระบุ DataSet ลงไป

=First(Fields!first_name.Value, "DataSet1")

Visual Studio 2019 ติดตั้ง Microsoft RDLC Report Designer

ไปที่เมนู Extensions | Manage Extensions แล้วพิมพ์ RDLC

เลือก Microsoft RDLC Report Designer เพื่อติดตั้ง

การใช้งานก็ใช้คู่กับ Microsoft.Reporting.NETCore

ตัวอย่างการใช้งาน