Задача: генерировать юридические документы и письма-уведомления из html-шаблонов. Разметка в шаблонах несложная: в рамках тегов <b>, <i>, <table>. Однако, документы могут быть достаточно объемными (~10 стр.).
Реализация: основная предпосылка - страница с валидной html-разметкой может быть успешно открыта в Word и дальнейшая работа с ней абсолютно не отличается от работы с файлами doc/docx формата. Вы можете убедиться в этом, сохранив следующий код в текстовом файле и открыв в Word:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<h1>Hello!</h1>
lorem ipsum dolor sit amet
</body>
</html>
Что нам это дает:- нет необходимости работать с проприетарными форматами файлов;
- одна и та же технология может использоваться для генерации как документов, так и писем с html-разметкой;
- простота редактирования html и поддержки кода в целом.
Как делать не надо:
Вполне логично использовать для наших целей ASP.NET MVC. Тут тебе и типизированные View, и лаконичный Razor-синтаксис, и мощный IntelliSence. Но разворачивать всё MVC-окружение ради генерации одного документа непрактично. Тут-то нам и поможет RazorEngine - движок для рендеринга html из Razor-разметки.
Для подробного примера по генерации html из шаблона, создадим новое консольное приложение и добавим в состав проекта файл Template.cshtml со следующим содержанием:
@model YourProject.TemplateViewModel
<html>
<head>
<meta charset="utf-8" /></head>
<body>
<h1>@Model.Title</h1>
@Model.Body
</body>
</html>
Для файла необходимо установить свойства BuildAction: Content, Copy to Output Directory: Always.Поскольку мы хотим пользоваться IntelliSence при редактировании шаблона, установим ASP.NET MVC, и, конечно, сам RazorEngine:
Install-Package Microsoft.AspNet.Mvc -Version 5.2.3За рендеринг html отвечает метод RazorEngine.Razor.Parse (помечен как Obsolete в новых версиях движка, но хорошо подходит для демонстрационных целей). Дальше без комментариев:
Install-Package RazorEngine -Version 3.6.1
var model = new YourProject.TemplateViewModel
{
Title = "Hello RazorEngine!",
Body = "Stop string.Replace terror!"
};
string path = Environment.CurrentDirectory + "\\Template.cshtml";
string template = File.ReadAllText(path);
string result = RazorEngine.Razor.Parse(template, model);
Console.WriteLine(result);
Результат:
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<h1>Hello RazorEngine!</h1>
Stop string.Replace terror!
</body>
</html>
Готово! Пусть не самое производительное, не самое технологичное решение, но простейший работоспособный пример можно развернуть буквально за 5 минут. Успехов!
Комментариев нет:
Отправить комментарий