Это руководство подробно объясняет использование Magicodes.
Функция PdfExporterAttribute используется для установки общих параметров экспорта PDF, таких как ориентация страницы, тип бумаги и т.д. Включает следующие основные параметры:
Функция ExporterHeaderAttribute используется для установки информации о колонках, которая может использоваться для установки названий отображаемых полей в PDF форме. DisplayName: Отображаемое имя
Install-Package Magicodes.IE.Pdf
public class Student
{
/// <summary>
/// Имя
/// </summary>
public string Name { get; set; }
/// <summary>
/// Возраст
/// </summary>
public int Age { get; set; }
}
public async Task ExportPdf()
{
var exporter = new PdfExporter();
var result = await exporter.ExportListByTemplate("test.pdf", new List<Student>()
{
new Student
{
Name = "Мистер А",
Age = 18
},
new Student
{
Name = "Мистер Б",
Age = 19
},
new Student
{
Name = "Мистер Б",
Age = 20
}
});
}
Экспорт PDF также поддерживает передачу классов с параметрами, как показано ниже:
/// <summary>
/// Экспорт PDF
/// </summary>
/// <param name="data">Данные</param>
/// <param name="pdfExporterAttribute">Параметры экспорта PDF</param>
/// <param name="template">Шаблон</param>
/// <returns></returns>
Task<byte[]> ExportListBytesByTemplate<T>(ICollection<T> data, PdfExporterAttribute pdfExporterAttribute,
string template) where T : class;
/// <summary>
/// Экспорт PDF
/// </summary>
/// <param name="data">Данные</param>
/// <param name="pdfExporterAttribute">Параметры экспорта PDF</param>
/// <param name="template">Шаблон</param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
Task<byte[]> ExportBytesByTemplate<T>(T data, PdfExporterAttribute pdfExporterAttribute, string template)
where T : class;
Экспортированный контент представлен ниже.
Вышеуказанный код экспортирует простую таблицу PDF, используя встроенный шаблон таблицы в Magicodes. Если требуется настраивать заголовок, можно использовать функцию [ExporterHeader].
[PdfExporter(Name = "Студенты")]
public class Student
{
/// <summary>
/// Имя
/// </summary>
[ExporterHeader(DisplayName = "Имя")]
[Display(Name = "Отображение имени")]
public string Name { get; set; }
/// <summary>
/// Возраст
/// </summary>
[ExporterHeader(DisplayName = "Возраст")]
public int Age { get; set; }
}
Результат выполнения после изменения вышеуказанного кода представлен ниже.
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"/>
<title></title>
<style type="text/css">
body { font-family: SimSun !important; }
p { margin: 0px; }
footer {
color: #333;
font-size: 1.2rem;
margin-bottom: 1.5rem;
margin-right: 5%;
margin-top: 1.2rem;
text-align: right;
}
table,
td {
border: 1px solid #444;
border-collapse: collapse;
/* text-align: center; */
height: 2rem;
padding: 5px;
}
</style>
</head>
<body>
<p style="color: #000; font-size: 1.8rem; height: 32px; text-align: center;">
@Model.Title
</p>
<p style="color: #333; font-size: 1.2rem; margin-left: 5%; margin-top: 1%;">
<text>Номер: @Model.Data.Code</text>
<text style="padding-left: 52%; text-align: right;">Дата операции: @Model.Data.TradeTime.ToString("yyyy-MM-dd HH:mm:ss")</text>
</p>
<table width="90%" style="margin-left: 5%; margin-top: 1%;">
<tr style="font-size: 1rem;">
<td style="text-align: center; width: 11%;">Имя плательщика</td>
<td colspan="2">@Model.Data.Name</td>
<td style="text-align: center; width: 13%;">Номер паспорта</td>
<td colspan="3">@Model.Data.IdNo</td>
</tr>
<tr style="font-size: 1rem;">
<td style="text-align: center">Сумма операции</td>
<td colspan="6">
<span>¥: @Model.Data.Amount</span>
<span style="padding: 0 2% 0 2%;">Китайский текст суммы:</span>
<span>@Model.Data.UppercaseAmount</span>
</td>
</tr>
<tr style="font-size: 1rem;">
<td style="text-align: center">Способ оплаты</td>
<td colspan="2">@Model.Data.PaymentMethod</td>
<td style="text-align: center; width: 13%;">Статус операции</td>
<td colspan="3">@Model.Data.TradeStatus</td>
</tr>
<tr style="font-size: 1rem;">
<td style="text-align: center">Причина платежа</td>
<td style="width: 22.3%;">@Model.Data.Remark</td>
<td style="text-align: center; width: 11%;">Год обучения</td>
<td style="width: 22.3%;" colspan="2">@Model.Data.Grade</td>
<td style="text-align: center; width: 11%;">Профессия</td>
<td style="width: 22.3%;">@Model.Data.Profession</td>
</tr>
</table>
</body>
</html>
IE поддерживает запись HTML-шаблонов для удобства создания шаблонов, как показано в приведённом выше коде.
[Exporter(Name = "Хунаньсинлай информационные технологии компании электронный чек")]
public class ReceiptInfo
{
/// <summary>
/// Дата операции
/// </summary>
public DateTime TradeTime { get; set; }
/// <summary>
/// Имя
/// </summary>
public string Name { get; set; }
/// <summary>
/// Номер паспорта
/// </summary>
public string IdNo { get; set; }
/// <summary>
/// Сумма
/// </summary>
public decimal Amount { get; set; }
/// <summary>
/// Способ оплаты
/// </summary>
public string PaymentMethod { get; set; }
/// <summary>
/// Статус операции
/// </summary>
public string TradeStatus { get; set; }
/// <summary>
/// Примечание
/// </summary>
public string Remark { get; set; }
/// <summary>
/// Год обучения
/// </summary>
public string Grade { get; set; }
/// <summary>
/// Профессия
/// </summary>
public string Profession { get; set; }
/// <summary>
/// Получатель платежа
/// </summary>
public string Payee { get; set; }
/// <summary>
/// Китайский текст суммы
/// </summary>
public string UppercaseAmount { get; set; }
/// <summary>
/// Номер
/// </summary>
public string Code { get; set; }
}
```1. Вы можете указывать название в шаблоне через функцию Exporter, и вы также можете работать без этого атрибута, так как этот шаблон полностью настраиваемый.
- Как использовать кастомный шаблон для экспорта? Код представлен ниже.
```csharp
public async Task ExportReceipt()
{
var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates",
"receipt.cshtml");
var tpl = File.ReadAllText(tplPath);
var exporter = new PdfExporter();
// Здесь используется дефолтный шаблон для экспорта
var result = await exporter.ExportByTemplate("test.pdf",
new ReceiptInfo
{
Amount = 22939.43m,
Grade = "2019 осень",
IdNo = "43062619890622xxxx",
Name = "Чжан Сан",
Payee = "Хунаньсинлай информационные технологии компания",
PaymentMethod = "Оплата WeChat",
Profession = "Обучение тренировкам",
Remark = "Учебные сборы",
TradeStatus = "Завершено",
TradeTime = DateTime.Now,
UppercaseAmount = "Двадцать две тысячи двести девяносто три рубля сорок три цента",
Code = "19071800001"
}, tpl);
}
С помощью вышеуказанного кода нам нужно указать передачу содержимого шаблона, и конечный эффект экспорта следующий.
В некоторых случаях нам требуется экспортировать несколько данных в PDF, например, банк предоставляет пакетные чеки. То есть с помощью Magicodes можно очень просто реализовать аналогичные требования. Основные шаги показаны ниже:
Создание шаблона
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"/>
<title></title>
<style type="text/css">
body { font-family: SimSun !important; }
p { margin: 0px; }
footer {
color: #333;
font-size: 1.2rem;
margin-bottom: 1.5rem;
margin-right: 5%;
margin-top: 1.2rem;
text-align: right;
}
table,
td {
border: 1px solid #444;
border-collapse: collapse;
height: 2rem;
padding: 5px;
}
.evenNum {
margin-bottom: 8%;
padding-top: 10%;
}
</style>
</head>
<body>
@for (var i = 0; i < Model.Data.ReceiptInfoInputs.Count; i++)
{
<div style="height: 41%; width: 100%;" class="@(i % 2 == 0 ? "" : "evenNum")">
<p style="color: #000; font-size: 1.8rem; height: 32px; text-align: center;">
@Model.Data.Title
</p>
<p style="color: #333; font-size: 1.2rem; margin-left: 5%; margin-top: 1%;">
<text>НОМЕР: @Model.Data.ReceiptInfoInputs[i].Code</text>
<text style="padding-left: 52%; text-align: right;">Дата операции: @Model.Data.ReceiptInfoInputs[i].TradeTime.ToString("yyyy-MM-dd HH:mm:ss")</text>
</p>
<table width="90%" style="margin-left: 5%; margin-top: 1%;">
<tr style="font-size: 1rem;">
<td style="text-align: center; width: 11%;">Имя плательщика</td>
<td colspan="2">@Model.Data.ReceiptInfoInputs[i].Name</td>
<td style="text-align: center; width: 13%;">Номер удостоверения личности</td>
<td colspan="3">@Model.Data.ReceiptInfoInputs[i].IdNo</td>
</tr>
<tr style="font-size: 1rem;">
<td style="text-align: center">Сумма операции</td>
<td colspan="6">
<span>¥: @Model.Data.ReceiptInfoInputs[i].Amount</span>
<span style="padding: 0 2% 0 2%;">Китайский текст суммы:</span>
<span>@Model.Data.ReceiptInfoInputs[i].UppercaseAmount</span>
</td>
</tr>
<tr style="font-size: 1rem;">
<td style="text-align: center">Способ оплаты</td>
<td colspan="2">@Model.Data.ReceiptInfoInputs[i].PaymentMethod</td>
<td style="text-align: center; width: 13%;">Статус операции</td>
<td colspan="3">@Model.Data.ReceiptInfoInputs[i].TradeStatus</td>
</tr>
<tr style="font-size: 1rem;">
<td style="text-align: center">Причина платежа</td>
<td style="width: 22.3%;">@Model.Data.ReceiptInfoInputs[i].Remark</td>
<td style="text-align: center; width: 11%;">Год обучения</td>
<td style="width: 22.3%;" colspan="2">@Model.Data.ReceiptInfoInputs[i].Grade</td>
<td style="text-align: center; width: 11%;">Профессия</td>
<td style="width: 22.3%;">@Model.Data.ReceiptInfoInputs[i].Profession</td>
</tr>
</table>
</div>
}
</body>
</html>
Создание класса DTO
/// <summary>
/// Данные для пакетного экспорта
/// </summary>
[PdfExporter(Orientation = Orientation.Portrait, PaperKind = PaperKind.A5)]
public class BatchReceiptInfoDto
{
/// <summary>
/// Время операции
/// </summary>
public DateTime TradeTime { get; set; }
/// <summary>
/// Имя
/// </summary>
public string Name { get; set; }
/// <summary>
/// Номер удостоверения личности
/// </summary>
public string IdNo { get; set; }
/// <summary>
/// Сумма
/// </summary>
public decimal Amount { get; set; }
/// <summary>
/// Способ оплаты
/// </summary>
public string PaymentMethod { get; set; }
/// <summary>
/// Статус операции
/// </summary>
public string TradeStatus { get; set; }
/// <summary>
/// Примечание
/// </summary>
public string Remark { get; set; }
/// <summary>
/// Год обучения
/// </summary>
public string Grade { get; set; }
/// <summary>
/// Профессия
/// </summary>
public string Profession { get; set; }
/// <summary>
/// Китайский текст суммы
/// </summary>
public string UppercaseAmount { get; set; }
/// <summary>
/// Номер
/// </summary>
public string Code { get; set; }
}
Как использовать
public async Task BathExportReceipt()
{
var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates",
"batchReceipt.cshtml");
var tpl = File.ReadAllText(tplPath);
var exporter = new PdfExporter();
var input = new BatchReceiptInfoInput
{
Payee = "湖南心莱信息科技有限公司",
ReceiptInfoInputs = new List<BatchReceiptInfoDto>()
};
for (var i = 0; i < 20; i++)
input.ReceiptInfoInputs.Add(new BatchReceiptInfoDto
{
Amount = 22939.43M,
Grade = "2019秋",
IdNo = "43062619890622xxxx",
Name = "张三",
PaymentMethod = "微信支付",
Profession = "运动训练",
Remark = "学费",
TradeStatus = "已完成",
TradeTime = DateTime.Now,
UppercaseAmount = "贰万贰仟玖佰叁拾玖圆肆角叁分",
Code = "1907180000" + i
});
// Здесь используется шаблон по умолчанию для экспорта
var result = await exporter.ExportByTemplate("test.pdf", input, tpl);
}
С помощью вышеуказанного кода нам нужно указать передачу содержимого шаблона, и конечный эффект экспорта следующий:## Предупреждения
На этом этапе весь учебник завершен. Однако стоит обратить внимание на следующие моменты:
Примечание: В последнем абзаце было заменено "под底层基于wkhtmltopdf库包" на более понятное описание на русском языке.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )