Я делаю проект в Asp.Net Core 2.1. Я использовал Rotativa.AspNetCore для функции отчетности. Это бесплатно, вы можете получить от NUGET, просто установите и все.
Преобразует вид в pdf. Вы просто передаете свою модель для просмотра и создания HTML-таблицы или того, что вы хотите, и вместе с CSS. Эта библиотека преобразует ваш вид в PDF.
[HttpGet]
public async Task<IActionResult> Registration(int id)
{
var reg = await _context.Registrations
.Include(x => x.Property.Block)
.Include(x => x.Property.Phase)
.Include(x => x.Property.Street)
.Include(x => x.Nomines)
.FirstOrDefaultAsync(x => x.Id == id);
var report = new ViewAsPdf("Registration")
{
PageMargins = { Left = 5, Bottom = 5, Right = 5, Top = 5 },
Model = reg
};
return report;
}
Вот HTML-код для этого представления. Я удаляю длинные HTML-файлы, но вы можете проверить мой код.
<div class="row">
<h1 class="report-heading text-center">Registration Form</h1>
<div class="col-xs-9">
<div class="form-group row">
<div class="col-xs-6 no-padding">
<label class="col-xs-3 report-label">Date:-</label>
<label class="col-xs-9 report-field">@(Model.DateTime?.ToString("dd-MMM-yyyy"))</label>
</div>
<div class="col-xs-6 no-padding">
<label class="col-xs-4 report-label">Form #</label>
<label class="col-xs-8 report-field">@(Model.FormNo)</label>
</div>
</div>
<div class="form-group row">
<div class="col-xs-6 no-padding">
<label class="col-xs-5 report-label">Plot/House #</label>
<label class="col-xs-7 report-field">@(Model?.Property?.No)</label>
</div>
<div class="col-xs-6 no-padding">
<label class="col-xs-3 report-label">Street:-</label>
<label class="col-xs-9 report-field">@(Model?.Property?.Street?.Name)</label>
</div>
</div>
<div class="form-group row">
<div class="col-xs-6 no-padding">
<label class="col-xs-3 report-label">Marla:-</label>
<label class="col-xs-9 report-field">@(Model?.Property?.Marla)</label>
</div>
<div class="col-xs-6 no-padding">
<label class="col-xs-3 report-label">Sqft:- </label>
<label class="col-xs-9 report-field">@(Model?.Property?.Sqft)</label>
</div>
</div>
<div class="form-group row">
<div class="col-xs-6 no-padding">
<label class="col-xs-3 report-label">Block:-</label>
<label class="col-xs-9 report-field">@(Model?.Property?.Block?.Name)</label>
</div>
<div class="col-xs-6 no-padding">
<label class="col-xs-3 report-label">Phase:-</label>
<label class="col-xs-9 report-field">@(Model?.Property?.Phase?.Name)</label>
</div>
</div>
</div>
</div>
И если вы хотите экспортировать это представление в Excel, тогда вам просто нужно добавить заголовок перед возвратом представления. Это образец.
public ActionResult Export()
{
Response.AddHeader("Content-Type", "application/vnd.ms-excel");
return View();
}
Надеюсь, это поможет вам.