мелкие правки и отчет
This commit is contained in:
parent
a954a4d741
commit
6d8d423580
50
CandidateReviewBusinessLogic/BusinessLogic/ReportLogic.cs
Normal file
50
CandidateReviewBusinessLogic/BusinessLogic/ReportLogic.cs
Normal file
@ -0,0 +1,50 @@
|
||||
using CandidateReviewBusinessLogic.OfficePackage;
|
||||
using CandidateReviewBusinessLogic.OfficePackage.HelperModels;
|
||||
using CandidateReviewContracts.BindingModels;
|
||||
using CandidateReviewContracts.BusinessLogicsContracts;
|
||||
using CandidateReviewContracts.SearchModels;
|
||||
using CandidateReviewContracts.StoragesContracts;
|
||||
using CandidateReviewContracts.ViewModels;
|
||||
|
||||
namespace CandidateReviewBusinessLogic.BusinessLogic
|
||||
{
|
||||
public class ReportLogic : IReportLogic
|
||||
{
|
||||
private readonly IResumeStorage _resumeStorage;
|
||||
private readonly IUserStorage _userStorage;
|
||||
private readonly IVacancyStorage _vacancyStorage;
|
||||
private readonly AbstractSaveToPdf _saveToPdf;
|
||||
public ReportLogic(IResumeStorage resumeStorage, AbstractSaveToPdf saveToPdf, IUserStorage userStorage, IVacancyStorage vacancyStorage)
|
||||
{
|
||||
_resumeStorage = resumeStorage;
|
||||
_saveToPdf = saveToPdf;
|
||||
_userStorage = userStorage;
|
||||
_vacancyStorage = vacancyStorage;
|
||||
}
|
||||
|
||||
public ResumeViewModel GetResume(ReportBindingModel model)
|
||||
{
|
||||
var resume = _resumeStorage.GetElement(new ResumeSearchModel
|
||||
{
|
||||
Id = model.ResumeId
|
||||
});
|
||||
resume.UserName = _userStorage.GetElement(new UserSearchModel { Id = resume.UserId }).Surname + " " + _userStorage.GetElement(new UserSearchModel { Id = resume.UserId }).Name + " " + _userStorage.GetElement(new UserSearchModel { Id = resume.UserId }).LastName;
|
||||
resume.VacancyName = _vacancyStorage.GetElement(new VacancySearchModel { Id = resume.VacancyId }).JobTitle;
|
||||
if (resume != null)
|
||||
{
|
||||
return resume;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void SaveResumeToPdf(ReportBindingModel model)
|
||||
{
|
||||
_saveToPdf.CreateDocReportResume(new PdfInfo
|
||||
{
|
||||
FileName = model.FileName,
|
||||
Title = GetResume(model).VacancyName,
|
||||
Resume = GetResume(model)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
@ -8,6 +8,8 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.2" />
|
||||
<PackageReference Include="MigraDoc.DocumentObjectModel.Core" Version="1.0.0" />
|
||||
<PackageReference Include="MigraDoc.Rendering.Core" Version="1.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
102
CandidateReviewBusinessLogic/OfficePackage/AbstractSaveToPdf.cs
Normal file
102
CandidateReviewBusinessLogic/OfficePackage/AbstractSaveToPdf.cs
Normal file
@ -0,0 +1,102 @@
|
||||
using CandidateReviewBusinessLogic.OfficePackage.HelperEnums;
|
||||
using CandidateReviewBusinessLogic.OfficePackage.HelperModels;
|
||||
|
||||
namespace CandidateReviewBusinessLogic.OfficePackage
|
||||
{
|
||||
public abstract class AbstractSaveToPdf
|
||||
{
|
||||
public void CreateDocReportResume(PdfInfo info)
|
||||
{
|
||||
CreatePdf(info);
|
||||
|
||||
// Заголовок резюме
|
||||
CreateParagraph(new PdfParagraph
|
||||
{
|
||||
Text = $"Резюме: {info.Title}",
|
||||
Style = "NormalTitle",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Center
|
||||
});
|
||||
|
||||
// ФИО и вакансия
|
||||
CreateParagraph(new PdfParagraph
|
||||
{
|
||||
Text = $"ФИО: {info.Resume.UserName ?? "Не указано"}",
|
||||
Style = "Normal",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||||
});
|
||||
|
||||
CreateParagraph(new PdfParagraph
|
||||
{
|
||||
Text = $"Вакансия: {info.Resume.VacancyName ?? "Не указано"}",
|
||||
Style = "Normal",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||||
});
|
||||
|
||||
// Образование
|
||||
CreateParagraph(new PdfParagraph
|
||||
{
|
||||
Text = "Образование:",
|
||||
Style = "Subtitle",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||||
});
|
||||
|
||||
CreateParagraph(new PdfParagraph
|
||||
{
|
||||
Text = info.Resume.Education ?? "Не указано",
|
||||
Style = "Normal",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||||
});
|
||||
|
||||
// Опыт работы
|
||||
CreateParagraph(new PdfParagraph
|
||||
{
|
||||
Text = "Опыт работы:",
|
||||
Style = "Subtitle",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||||
});
|
||||
|
||||
CreateParagraph(new PdfParagraph
|
||||
{
|
||||
Text = info.Resume.Experience ?? "Не указано",
|
||||
Style = "Normal",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||||
});
|
||||
|
||||
// Навыки
|
||||
CreateParagraph(new PdfParagraph
|
||||
{
|
||||
Text = "Навыки:",
|
||||
Style = "Subtitle",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||||
});
|
||||
|
||||
CreateParagraph(new PdfParagraph
|
||||
{
|
||||
Text = info.Resume.Skills ?? "Не указано",
|
||||
Style = "Normal",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||||
});
|
||||
|
||||
// Описание
|
||||
CreateParagraph(new PdfParagraph
|
||||
{
|
||||
Text = "Описание:",
|
||||
Style = "Subtitle",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||||
});
|
||||
|
||||
CreateParagraph(new PdfParagraph
|
||||
{
|
||||
Text = info.Resume.Description ?? "Не указано",
|
||||
Style = "Normal",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||||
});
|
||||
|
||||
SavePdf(info);
|
||||
}
|
||||
|
||||
protected abstract void CreatePdf(PdfInfo info);
|
||||
protected abstract void CreateParagraph(PdfParagraph paragraph);
|
||||
protected abstract void SavePdf(PdfInfo info);
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
namespace CandidateReviewBusinessLogic.OfficePackage.HelperEnums
|
||||
{
|
||||
public enum PdfParagraphAlignmentType
|
||||
{
|
||||
Center,
|
||||
Left,
|
||||
Right
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
using CandidateReviewContracts.ViewModels;
|
||||
|
||||
namespace CandidateReviewBusinessLogic.OfficePackage.HelperModels
|
||||
{
|
||||
public class PdfInfo
|
||||
{
|
||||
public string FileName { get; set; } = string.Empty;
|
||||
public string Title { get; set; } = string.Empty;
|
||||
public DateTime DateFrom { get; set; }
|
||||
public DateTime DateTo { get; set; }
|
||||
public ResumeViewModel Resume { get; set; } = new();
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
using CandidateReviewBusinessLogic.OfficePackage.HelperEnums;
|
||||
|
||||
namespace CandidateReviewBusinessLogic.OfficePackage.HelperModels
|
||||
{
|
||||
public class PdfParagraph
|
||||
{
|
||||
public string Text { get; set; } = string.Empty;
|
||||
public string Style { get; set; } = string.Empty;
|
||||
public PdfParagraphAlignmentType ParagraphAlignment { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
using CandidateReviewBusinessLogic.OfficePackage.HelperEnums;
|
||||
using CandidateReviewBusinessLogic.OfficePackage.HelperModels;
|
||||
using MigraDoc.DocumentObjectModel;
|
||||
using MigraDoc.DocumentObjectModel.Tables;
|
||||
using MigraDoc.Rendering;
|
||||
|
||||
namespace CandidateReviewBusinessLogic.OfficePackage.Implements
|
||||
{
|
||||
public class SaveToPdf : AbstractSaveToPdf
|
||||
{
|
||||
private Document? _document;
|
||||
private Section? _section;
|
||||
private static ParagraphAlignment
|
||||
GetParagraphAlignment(PdfParagraphAlignmentType type)
|
||||
{
|
||||
return type switch
|
||||
{
|
||||
PdfParagraphAlignmentType.Center => ParagraphAlignment.Center,
|
||||
PdfParagraphAlignmentType.Left => ParagraphAlignment.Left,
|
||||
PdfParagraphAlignmentType.Right => ParagraphAlignment.Right,
|
||||
_ => ParagraphAlignment.Justify,
|
||||
};
|
||||
}
|
||||
|
||||
private static void DefineStyles(Document document)
|
||||
{
|
||||
var style = document.Styles["Normal"];
|
||||
style.Font.Name = "Times New Roman";
|
||||
style.Font.Size = 14;
|
||||
style.Font.Color = Colors.Black;
|
||||
|
||||
style = document.Styles.AddStyle("NormalTitle", "Normal");
|
||||
style.Font.Size = 16;
|
||||
style.Font.Bold = true;
|
||||
|
||||
style = document.Styles.AddStyle("Subtitle", "Normal");
|
||||
style.Font.Size = 14;
|
||||
style.Font.Bold = true;
|
||||
style.ParagraphFormat.SpaceBefore = "0.5cm";
|
||||
style.ParagraphFormat.SpaceAfter = "0.2cm";
|
||||
|
||||
document.DefaultPageSetup.TopMargin = "2.5cm";
|
||||
document.DefaultPageSetup.BottomMargin = "2.5cm";
|
||||
document.DefaultPageSetup.LeftMargin = "2cm";
|
||||
document.DefaultPageSetup.RightMargin = "2cm";
|
||||
}
|
||||
|
||||
protected override void CreatePdf(PdfInfo info)
|
||||
{
|
||||
_document = new Document();
|
||||
DefineStyles(_document);
|
||||
_section = _document.AddSection();
|
||||
}
|
||||
protected override void CreateParagraph(PdfParagraph pdfParagraph)
|
||||
{
|
||||
if (_section == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var paragraph = _section.AddParagraph(pdfParagraph.Text);
|
||||
paragraph.Format.SpaceAfter = "1cm";
|
||||
paragraph.Format.Alignment = GetParagraphAlignment(pdfParagraph.ParagraphAlignment);
|
||||
paragraph.Style = pdfParagraph.Style;
|
||||
}
|
||||
|
||||
protected override void SavePdf(PdfInfo info)
|
||||
{
|
||||
var renderer = new PdfDocumentRenderer(true)
|
||||
{
|
||||
Document = _document
|
||||
};
|
||||
renderer.RenderDocument();
|
||||
renderer.PdfDocument.Save(info.FileName);
|
||||
}
|
||||
}
|
||||
}
|
@ -83,6 +83,18 @@ namespace CandidateReviewClientApp.Controllers
|
||||
{
|
||||
throw new Exception("Пользователь не найден");
|
||||
}
|
||||
APIClient.PostRequest($"api/resume/update", new ResumeBindingModel
|
||||
{
|
||||
Id = resume.Id,
|
||||
Description = resume.Description,
|
||||
Education = resume.Education,
|
||||
Experience = resume.Experience,
|
||||
Skills = resume.Skills,
|
||||
Status = CandidateReviewDataModels.Enums.ResumeStatusEnum.Оценено,
|
||||
Title = resume.Title,
|
||||
UserId = resume.UserId,
|
||||
VacancyId = resume.VacancyId
|
||||
});
|
||||
return Redirect($"~/Resume/ResumeDetails/{resumeId}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@ -1,5 +1,6 @@
|
||||
using CandidateReviewClientApp.Models;
|
||||
using CandidateReviewContracts.BindingModels;
|
||||
using CandidateReviewContracts.BusinessLogicsContracts;
|
||||
using CandidateReviewContracts.ViewModels;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.Diagnostics;
|
||||
@ -15,6 +16,37 @@ namespace CandidateReviewClientApp.Controllers
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public IActionResult GetReport(int id)
|
||||
{
|
||||
if (APIClient.User == null)
|
||||
{
|
||||
return Redirect("~Home/Enter");
|
||||
}
|
||||
|
||||
// Получение данных резюме
|
||||
var resume = APIClient.GetRequest<ResumeViewModel>($"/api/resume/details?id={id}");
|
||||
if (resume == null)
|
||||
{
|
||||
return NotFound("Резюме не найдено.");
|
||||
}
|
||||
|
||||
var reportFilePath = $"C:\\Users\\User\\source\\repos\\CandidateReview\\Резюме_{resume.UserName}.pdf";
|
||||
|
||||
APIClient.PostRequest("api/report/resume", new ReportBindingModel
|
||||
{
|
||||
ResumeId = resume.Id,
|
||||
FileName = reportFilePath
|
||||
});
|
||||
|
||||
if (!System.IO.File.Exists(reportFilePath))
|
||||
{
|
||||
return NotFound("Файл отчета не найден.");
|
||||
}
|
||||
|
||||
return PhysicalFile(reportFilePath, "application/pdf", $"Resume_{resume.UserName}.pdf");
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> ResumeDetails(int? id)
|
||||
{
|
||||
|
@ -13,7 +13,7 @@
|
||||
<img src="@(Model.LogoFilePath ?? "https://static.thenounproject.com/png/2504969-200.png")"
|
||||
class="card-img-top img-fluid rounded-circle mx-auto d-block" alt="Логотип компании"
|
||||
style="max-width: 150px; max-height: 150px;">
|
||||
<div class="card-body text-center">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">@Model.Name</h5>
|
||||
<input type="hidden" name="id" value="@Model?.Id" />
|
||||
<p class="card-text">@((Model.Description ?? "Описание отсутствует"))</p>
|
||||
@ -40,7 +40,7 @@
|
||||
<dd class="col-sm-9">@((Model.Address?.ToString() ?? "Адрес не указан"))</dd>
|
||||
|
||||
<dt class="col-sm-3">Контакты:</dt>
|
||||
<dd class="col-sm-9">@((Model.Contacts?.ToString() ?? "Контакты не указаны"))</dd>
|
||||
<dd class="col-sm-9">@((Model.Contacts ?? "Контакты не указаны"))</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -46,7 +46,7 @@
|
||||
|
||||
<div class="col-12">
|
||||
<label for="contacts" class="form-label">Контакты</label>
|
||||
<input type="text" class="form-control" id="contacts" name="contacts" value="@Model?.Contacts" placeholder="Введите контактную информацию">
|
||||
<textarea class="form-control" id="contacts" name="contacts" rows="3" placeholder="Введите контактную информацию">@Model?.Contacts</textarea>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-between">
|
||||
|
@ -18,6 +18,7 @@
|
||||
<input type="hidden" name="id" value="@Model?.Id" />
|
||||
</div>
|
||||
<button class="btn btn-secondary" onclick="window.history.back();">Назад</button>
|
||||
<a asp-action="GetReport" asp-controller="Resume" asp-route-id="@Model.Id" class="btn btn-primary">Скачать PDF</a>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm mb-4">
|
||||
|
@ -5,5 +5,6 @@
|
||||
public string FileName { get; set; } = string.Empty;
|
||||
public DateTime? DateFrom { get; set; }
|
||||
public DateTime? DateTo { get; set; }
|
||||
public int ResumeId { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -1,32 +1,9 @@
|
||||
namespace CandidateReviewContracts.BusinessLogicsContracts
|
||||
using CandidateReviewContracts.BindingModels;
|
||||
|
||||
namespace CandidateReviewContracts.BusinessLogicsContracts
|
||||
{
|
||||
public interface IReportLogic
|
||||
{
|
||||
/*/// <summary>
|
||||
/// Получение списка компонент с указанием, в каких изделиях используются
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
List<ReportEngineComponentViewModel> GetEngineComponent();
|
||||
/// <summary>
|
||||
/// Получение списка заказов за определенный период
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
List<ReportOrdersViewModel> GetOrders(ReportBindingModel model);
|
||||
/// <summary>
|
||||
/// Сохранение компонент в файл-Word
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
void SaveEnginesToWordFile(ReportBindingModel model);
|
||||
/// <summary>
|
||||
/// Сохранение компонент с указаеним продуктов в файл-Excel
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
void SaveEngineComponentToExcelFile(ReportBindingModel model);
|
||||
/// <summary>
|
||||
/// Сохранение заказов в файл-Pdf
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
void SaveOrdersToPdfFile(ReportBindingModel model);*/
|
||||
{
|
||||
void SaveResumeToPdf(ReportBindingModel model);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,7 @@
|
||||
namespace CandidateReviewContracts.ViewModels
|
||||
{
|
||||
public class ReportResumeViewModel
|
||||
{
|
||||
|
||||
}
|
||||
}
|
@ -4,8 +4,6 @@
|
||||
{
|
||||
Черновик = 0,
|
||||
Обрабатывается = 1,
|
||||
Принято = 2,
|
||||
Отклонено = 3,
|
||||
Архив = 4
|
||||
Оценено = 2
|
||||
}
|
||||
}
|
||||
|
30
CandidateReviewRestApi/Controllers/ReportController.cs
Normal file
30
CandidateReviewRestApi/Controllers/ReportController.cs
Normal file
@ -0,0 +1,30 @@
|
||||
using CandidateReviewContracts.BindingModels;
|
||||
using CandidateReviewContracts.BusinessLogicsContracts;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace CandidateReviewRestApi.Controllers
|
||||
{
|
||||
[Route("api/[controller]/[action]")]
|
||||
[ApiController]
|
||||
public class ReportController : Controller
|
||||
{
|
||||
private readonly IReportLogic _reportLogic;
|
||||
public ReportController(IReportLogic reportLogic)
|
||||
{
|
||||
_reportLogic = reportLogic;
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public void Resume(ReportBindingModel model)
|
||||
{
|
||||
try
|
||||
{
|
||||
_reportLogic.SaveResumeToPdf(model);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception(ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,6 @@
|
||||
using CandidateReviewBusinessLogic.BusinessLogic;
|
||||
using CandidateReviewBusinessLogic.OfficePackage;
|
||||
using CandidateReviewBusinessLogic.OfficePackage.Implements;
|
||||
using CandidateReviewContracts.BusinessLogicsContracts;
|
||||
using CandidateReviewContracts.StoragesContracts;
|
||||
using CandidateReviewDatabaseImplement.Implements;
|
||||
@ -27,6 +29,10 @@ builder.Services.AddTransient<IAssessmentLogic, AssessmentLogic>();
|
||||
builder.Services.AddTransient<ICriterionLogic, CriterionLogic>();
|
||||
builder.Services.AddTransient<IAssessmentCriterionLogic, AssessmentCriterionLogic>();
|
||||
|
||||
builder.Services.AddTransient<IReportLogic, ReportLogic>();
|
||||
|
||||
builder.Services.AddTransient<AbstractSaveToPdf, SaveToPdf>();
|
||||
|
||||
builder.Services.AddControllers();
|
||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||
builder.Services.AddEndpointsApiExplorer();
|
||||
|
BIN
Resume_k j.pdf
Normal file
BIN
Resume_k j.pdf
Normal file
Binary file not shown.
BIN
Resume_Татьяна Артамонова.pdf
Normal file
BIN
Resume_Татьяна Артамонова.pdf
Normal file
Binary file not shown.
699
Резюме_Пользователь Тест.pdf
Normal file
699
Резюме_Пользователь Тест.pdf
Normal file
@ -0,0 +1,699 @@
|
||||
%PDF-1.4
|
||||
%ÓôÌá
|
||||
1 0 obj
|
||||
<<
|
||||
/CreationDate(D:20241214201221+04'00')
|
||||
/Creator(empira MigraDoc 1.50.4740 \(www.migradoc.com\))
|
||||
/Producer(PDFsharp 1.50.4740 \(www.pdfsharp.com\))
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/Type/Catalog
|
||||
/Pages 3 0 R
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/Type/Pages
|
||||
/Count 1
|
||||
/Kids[4 0 R]
|
||||
>>
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/Type/Page
|
||||
/MediaBox[0 0 595.276 841.89]
|
||||
/Parent 3 0 R
|
||||
/Contents 5 0 R
|
||||
/Resources
|
||||
<<
|
||||
/ProcSet [/PDF/Text/ImageB/ImageC/ImageI]
|
||||
/ExtGState
|
||||
<<
|
||||
/GS0 6 0 R
|
||||
>>
|
||||
/Font
|
||||
<<
|
||||
/F0 10 0 R
|
||||
/F1 14 0 R
|
||||
>>
|
||||
>>
|
||||
/Group
|
||||
<<
|
||||
/CS/DeviceRGB
|
||||
/S/Transparency
|
||||
>>
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Length 5823
|
||||
>>
|
||||
stream
|
||||
q
|
||||
q
|
||||
BT
|
||||
0 0 0 rg
|
||||
/GS0 gs
|
||||
/F0 16 Tf
|
||||
204.6886 756.0862 Td <024A025F026102780266025F001D> Tj
|
||||
62.8594 0 Td <0249026A0268025D026A025A026602660262026B026C> Tj
|
||||
103.4844 0 Td <00260006> Tj
|
||||
/F1 14 Tf
|
||||
-314.3394 -44.8777 Td <024E02420248001D> Tj
|
||||
38.6709 0 Td <024C025F026B026C> Tj
|
||||
30.5977 0 Td <024902680265027602610268025C025A026C025F02650276> Tj
|
||||
-69.2686 -44.4451 Td <023C025A0264025A0267026B02620279001D> Tj
|
||||
63.5947 0 Td <0249026A0268025D026A025A026602660262026B026C> Tj
|
||||
84.1094 0 Td <00260006> Tj
|
||||
/F0 14 Tf
|
||||
-147.7041 -44.4451 Td <0248025B026A025A02610268025C025A02670262025F001D> Tj
|
||||
/F1 14 Tf
|
||||
0 -44.4451 Td <023C0275026B0272025F025F> Tj
|
||||
51.666 0 Td <024D0265023D024C024D> Tj
|
||||
/F0 14 Tf
|
||||
-51.666 -44.4451 Td <024802690275026C> Tj
|
||||
40.2637 0 Td <026A025A025B0268026C0275001D> Tj
|
||||
/F1 14 Tf
|
||||
-40.2637 -44.4451 Td <0267025F026C> Tj
|
||||
/F0 14 Tf
|
||||
0 -44.4451 Td <0247025A025C027502640262001D> Tj
|
||||
/F1 14 Tf
|
||||
0 -44.4451 Td <024A025A0261026A025A025B0268026C0264025A> Tj
|
||||
69.501 0 Td <0267025A> Tj
|
||||
17.2061 0 Td <00260006> Tj
|
||||
19.8379 0 Td <0262> Tj
|
||||
10.9922 0 Td <0011003100280037001D> Tj
|
||||
38.1035 0 Td <026802690275026C> Tj
|
||||
33.5166 0 Td <026B02680261025E025A026702620279> Tj
|
||||
57.0049 0 Td <0269026A0262026502680260025F026702620263> Tj
|
||||
77.834 0 Td <026B> Tj
|
||||
9.7139 0 Td <0262026B026902680265027602610268025C025A02670262025F0266> Tj
|
||||
100.4814 0 Td <0011003100280037> Tj
|
||||
-434.1914 -16.0986 Td <00290055004400500048005A00520055004E> Tj
|
||||
68.0381 0 Td <0262> Tj
|
||||
10.9922 0 Td <0011003100280037> Tj
|
||||
34.2139 0 Td <0026005200550048000F> Tj
|
||||
34.2139 0 Td <025C0264026502780271025A0279> Tj
|
||||
54.0518 0 Td <003A00330029000F> Tj
|
||||
35.7861 0 Td <0024003600330011003100280037> Tj
|
||||
59.8965 0 Td <0026005200550048> Tj
|
||||
30.7139 0 Td <0262> Tj
|
||||
10.9922 0 Td <0025004F0044005D005200550011> Tj
|
||||
-338.8984 -16.0986 Td <023B025A02610275> Tj
|
||||
32.6895 0 Td <025E025A026702670275026F001D> Tj
|
||||
52.1172 0 Td <026D025C025F026A025F02670267025A0279> Tj
|
||||
64.1758 0 Td <026A025A025B0268026C025A> Tj
|
||||
43.1689 0 Td <026B> Tj
|
||||
9.7139 0 Td <00300036> Tj
|
||||
23.7344 0 Td <00360034002F> Tj
|
||||
29.9482 0 Td <003600480055005900480055> Tj
|
||||
40.0381 0 Td <0262> Tj
|
||||
10.9922 0 Td <0033005200560057004A0055004800360034002F> Tj
|
||||
71.9482 0 Td <000B0261025A0269026A0268026B0275000F> Tj
|
||||
-378.5264 -16.0986 Td <02680269026C0262026602620261025A027002620279000F> Tj
|
||||
84.6221 0 Td <0269026A0268025F0264026C0262026A0268025C025A02670262025F> Tj
|
||||
99.6406 0 Td <026B026F025F0266> Tj
|
||||
31.7871 0 Td <025E025A026702670275026F000C0011> Tj
|
||||
-216.0498 -16.0986 Td <00240033002C> Tj
|
||||
26.0586 0 Td <0262> Tj
|
||||
10.9922 0 Td <02620267026C025F025D026A025A027002620262001D> Tj
|
||||
76.1387 0 Td <026A025A0261026A025A025B0268026C0264025A> Tj
|
||||
68.7148 0 Td <0262> Tj
|
||||
10.9922 0 Td <026C025F026B026C0262026A0268025C025A02670262025F> Tj
|
||||
83.6787 0 Td <0035002800360037> Tj
|
||||
37.7275 0 Td <00240033002C000F> Tj
|
||||
29.5586 0 Td <026A025A025B0268026C025A> Tj
|
||||
43.1689 0 Td <026B> Tj
|
||||
9.7139 0 Td <026B026C0268026A026802670267026202660262> Tj
|
||||
-396.7441 -16.0986 Td <025B0262025B026502620268026C025F0264025A02660262> Tj
|
||||
88.416 0 Td <0262> Tj
|
||||
10.9922 0 Td <026B025F026A025C0262026B025A02660262> Tj
|
||||
65.8096 0 Td <000B0267025A0269026A02620266025F026A000F> Tj
|
||||
69.4258 0 Td <0036005A0044004A004A00480055000F> Tj
|
||||
55.9863 0 Td <002D003600320031000F> Tj
|
||||
40.4551 0 Td <003B0030002F000C0011> Tj
|
||||
-331.085 -16.0986 Td <024B0262026B026C025F02660275> Tj
|
||||
57.1416 0 Td <026402680267026C026A026802650279> Tj
|
||||
58.3379 0 Td <025C025F026A026B02620263001D> Tj
|
||||
48.4121 0 Td <026802690275026C> Tj
|
||||
33.5166 0 Td <026A025A025B0268026C0275> Tj
|
||||
46.3613 0 Td <026B> Tj
|
||||
9.7139 0 Td <002A004C0057> Tj
|
||||
21.3896 0 Td <000B002A004C0057002B00580045000F> Tj
|
||||
53.6621 0 Td <002A004C0057002F00440045000F> Tj
|
||||
46.6553 0 Td <0025004C0057004500580046004E00480057000C000F> Tj
|
||||
-375.1904 -16.0986 Td <0267025A026B026C026A026802630264025A> Tj
|
||||
64.0459 0 Td <025C025F026C025C0265025F026702620263000F> Tj
|
||||
68.2295 0 Td <026A025A0261026A025F0272025F02670262025F> Tj
|
||||
73.6504 0 Td <026402680267026E026502620264026C0268025C0011> Tj
|
||||
-205.9258 -16.0986 Td <0249026A026202670270026202690275> Tj
|
||||
67.4775 0 Td <026A025A0261026A025A025B0268026C02640262001D> Tj
|
||||
73.8828 0 Td <026B0265025F025E0268025C025A02670262025F> Tj
|
||||
71.0596 0 Td <0269026A02620267027002620269025A0266> Tj
|
||||
70.5264 0 Td <024802480249000F> Tj
|
||||
37.3311 0 Td <00360032002F002C0027000F> Tj
|
||||
48.2207 0 Td <0269025A026C026C025F026A0267025A0266> Tj
|
||||
-368.498 -16.0986 Td <0269026A0268025F0264026C0262026A0268025C025A026702620279> Tj
|
||||
99.8662 0 Td <000B0036004C0051004A004F0048005700520051000F> Tj
|
||||
65.3311 0 Td <002900440046005700520055005C000F> Tj
|
||||
49.7656 0 Td <00350048005300520056004C005700520055005C000C0011> Tj
|
||||
/F0 14 Tf
|
||||
-214.9629 -44.4451 Td <024802690262026B025A02670262025F001D> Tj
|
||||
/F1 14 Tf
|
||||
0 -44.4451 Td <02460268026C0262025C0262026A0268025C025A0267026702750263> Tj
|
||||
109.3682 0 Td <0262> Tj
|
||||
10.9922 0 Td <0270025F0265025F026D026B026C026A025F02660265025F0267026702750263> Tj
|
||||
116.8945 0 Td <0269026A0268025D026A025A026602660262026B026C> Tj
|
||||
81.4912 0 Td <00260006> Tj
|
||||
19.8379 0 Td <026B> Tj
|
||||
9.7139 0 Td <025B02680265025F025F> Tj
|
||||
37.0371 0 Td <0271025F0266> Tj
|
||||
25.6143 0 Td <0015> Tj
|
||||
10.5 0 Td <025D0268025E025A02660262> Tj
|
||||
-421.4492 -16.0986 Td <026802690275026C025A> Tj
|
||||
39.7305 0 Td <026A025A0261026A025A025B0268026C02640262> Tj
|
||||
69.9932 0 Td <0269026A0268025D026A025A0266026602670268025D0268> Tj
|
||||
88.9014 0 Td <0268025B025F026B0269025F0271025F0267026202790011> Tj
|
||||
81.9355 0 Td <024D0271025A026B026C025C0268025C025A0265> Tj
|
||||
72.4199 0 Td <025C> Tj
|
||||
10.1104 0 Td <026B02680261025E025A026702620262> Tj
|
||||
-363.0908 -16.0986 Td <026A025A026102650262027102670275026F> Tj
|
||||
67.6621 0 Td <0269026A0262026502680260025F026702620263001D> Tj
|
||||
81.7236 0 Td <0268026C> Tj
|
||||
16.6182 0 Td <025C025F025B0010> Tj
|
||||
24.6094 0 Td <026B025A0263026C0268025C> Tj
|
||||
43.1484 0 Td <025E0268> Tj
|
||||
17.623 0 Td <02640268026A02690268026A025A026C0262025C02670275026F> Tj
|
||||
96.127 0 Td <026A025F0272025F0267026202630011> Tj
|
||||
ET
|
||||
Q
|
||||
Q
|
||||
endstream
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/Type/ExtGState
|
||||
/ca 1
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/Type/FontDescriptor
|
||||
/Ascent 891
|
||||
/CapHeight 662
|
||||
/Descent 216
|
||||
/Flags 32
|
||||
/FontBBox[-558 -328 2000 1056]
|
||||
/ItalicAngle 0
|
||||
/StemV 0
|
||||
/XHeight 457
|
||||
/FontName/MDQFGI+Times#20New#20Roman,Bold
|
||||
/FontFile2 15 0 R
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Length 807
|
||||
>>
|
||||
stream
|
||||
/CIDInit /ProcSet findresource begin
|
||||
12 dict begin
|
||||
begincmap
|
||||
/CIDSystemInfo << /Registry (Adobe)/Ordering (UCS)/Supplement 0>> def
|
||||
/CMapName /Adobe-Identity-UCS def /CMapType 2 def
|
||||
1 begincodespacerange
|
||||
<0006><0278>
|
||||
endcodespacerange
|
||||
24 beginbfrange
|
||||
<024A><024A><0420>
|
||||
<025F><025F><0435>
|
||||
<0261><0261><0437>
|
||||
<0278><0278><044E>
|
||||
<0266><0266><043C>
|
||||
<001D><001D><003A>
|
||||
<0249><0249><041F>
|
||||
<026A><026A><0440>
|
||||
<0268><0268><043E>
|
||||
<025D><025D><0433>
|
||||
<025A><025A><0430>
|
||||
<0262><0262><0438>
|
||||
<026B><026B><0441>
|
||||
<026C><026C><0442>
|
||||
<0026><0026><0043>
|
||||
<0006><0006><0023>
|
||||
<0248><0248><041E>
|
||||
<025B><025B><0431>
|
||||
<025C><025C><0432>
|
||||
<0267><0267><043D>
|
||||
<0269><0269><043F>
|
||||
<0275><0275><044B>
|
||||
<0247><0247><041D>
|
||||
<0264><0264><043A>
|
||||
endbfrange
|
||||
endcmap CMapName currentdict /CMap defineresource pop end end
|
||||
endstream
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Type/Font
|
||||
/Subtype/CIDFontType2
|
||||
/CIDSystemInfo
|
||||
<<
|
||||
/Ordering(Identity)
|
||||
/Registry(Adobe)
|
||||
/Supplement 0
|
||||
>>
|
||||
/FontDescriptor 7 0 R
|
||||
/BaseFont/MDQFGI+Times#20New#20Roman,Bold
|
||||
/W [6[500]29[333]38[722]583[777]584[777]585[777]586[610]602[500]603[500]604[540]605[454]607[443]609[401]610[576]612[576]614[681]615[576]616[500]617[576]618[556]619[443]620[491]629[780]632[764]]
|
||||
>>
|
||||
endobj
|
||||
10 0 obj
|
||||
<<
|
||||
/Type/Font
|
||||
/Subtype/Type0
|
||||
/Encoding/Identity-H
|
||||
/ToUnicode 8 0 R
|
||||
/BaseFont/MDQFGI+Times#20New#20Roman,Bold
|
||||
/DescendantFonts[9 0 R]
|
||||
>>
|
||||
endobj
|
||||
11 0 obj
|
||||
<<
|
||||
/Type/FontDescriptor
|
||||
/Ascent 891
|
||||
/CapHeight 662
|
||||
/Descent 216
|
||||
/Flags 32
|
||||
/FontBBox[-568 -307 2046 1040]
|
||||
/ItalicAngle 0
|
||||
/StemV 0
|
||||
/XHeight 447
|
||||
/FontName/SNFKNA+Times#20New#20Roman
|
||||
/FontFile2 16 0 R
|
||||
>>
|
||||
endobj
|
||||
12 0 obj
|
||||
<<
|
||||
/Length 2127
|
||||
>>
|
||||
stream
|
||||
/CIDInit /ProcSet findresource begin
|
||||
12 dict begin
|
||||
begincmap
|
||||
/CIDSystemInfo << /Registry (Adobe)/Ordering (UCS)/Supplement 0>> def
|
||||
/CMapName /Adobe-Identity-UCS def /CMapType 2 def
|
||||
1 begincodespacerange
|
||||
<0006><0279>
|
||||
endcodespacerange
|
||||
90 beginbfrange
|
||||
<024E><024E><0424>
|
||||
<0242><0242><0418>
|
||||
<0248><0248><041E>
|
||||
<001D><001D><003A>
|
||||
<024C><024C><0422>
|
||||
<025F><025F><0435>
|
||||
<026B><026B><0441>
|
||||
<026C><026C><0442>
|
||||
<0249><0249><041F>
|
||||
<0268><0268><043E>
|
||||
<0265><0265><043B>
|
||||
<0276><0276><044C>
|
||||
<0261><0261><0437>
|
||||
<025C><025C><0432>
|
||||
<025A><025A><0430>
|
||||
<023C><023C><0412>
|
||||
<0264><0264><043A>
|
||||
<0267><0267><043D>
|
||||
<0262><0262><0438>
|
||||
<0279><0279><044F>
|
||||
<026A><026A><0440>
|
||||
<025D><025D><0433>
|
||||
<0266><0266><043C>
|
||||
<0026><0026><0043>
|
||||
<0006><0006><0023>
|
||||
<0275><0275><044B>
|
||||
<0272><0272><0448>
|
||||
<024D><024D><0423>
|
||||
<023D><023D><0413>
|
||||
<024A><024A><0420>
|
||||
<025B><025B><0431>
|
||||
<0011><0011><002E>
|
||||
<0031><0031><004E>
|
||||
<0028><0028><0045>
|
||||
<0037><0037><0054>
|
||||
<0269><0269><043F>
|
||||
<025E><025E><0434>
|
||||
<0260><0260><0436>
|
||||
<0263><0263><0439>
|
||||
<0029><0029><0046>
|
||||
<0055><0055><0072>
|
||||
<0044><0044><0061>
|
||||
<0050><0050><006D>
|
||||
<0048><0048><0065>
|
||||
<005A><005A><0077>
|
||||
<0052><0052><006F>
|
||||
<004E><004E><006B>
|
||||
<000F><000F><002C>
|
||||
<0278><0278><044E>
|
||||
<0271><0271><0447>
|
||||
<003A><003A><0057>
|
||||
<0033><0033><0050>
|
||||
<0024><0024><0041>
|
||||
<0036><0036><0053>
|
||||
<0025><0025><0042>
|
||||
<004F><004F><006C>
|
||||
<005D><005D><007A>
|
||||
<023B><023B><0411>
|
||||
<026F><026F><0445>
|
||||
<026D><026D><0443>
|
||||
<0030><0030><004D>
|
||||
<0034><0034><0051>
|
||||
<002F><002F><004C>
|
||||
<0059><0059><0076>
|
||||
<0056><0056><0073>
|
||||
<0057><0057><0074>
|
||||
<004A><004A><0067>
|
||||
<000B><000B><0028>
|
||||
<0270><0270><0446>
|
||||
<000C><000C><0029>
|
||||
<002C><002C><0049>
|
||||
<0035><0035><0052>
|
||||
<002D><002D><004A>
|
||||
<0032><0032><004F>
|
||||
<003B><003B><0058>
|
||||
<024B><024B><0421>
|
||||
<002A><002A><0047>
|
||||
<004C><004C><0069>
|
||||
<002B><002B><0048>
|
||||
<0058><0058><0075>
|
||||
<0045><0045><0062>
|
||||
<0046><0046><0063>
|
||||
<026E><026E><0444>
|
||||
<0027><0027><0044>
|
||||
<0051><0051><006E>
|
||||
<005C><005C><0079>
|
||||
<0053><0053><0070>
|
||||
<0246><0246><041C>
|
||||
<0015><0015><0032>
|
||||
<0010><0010><002D>
|
||||
endbfrange
|
||||
endcmap CMapName currentdict /CMap defineresource pop end end
|
||||
endstream
|
||||
endobj
|
||||
13 0 obj
|
||||
<<
|
||||
/Type/Font
|
||||
/Subtype/CIDFontType2
|
||||
/CIDSystemInfo
|
||||
<<
|
||||
/Ordering(Identity)
|
||||
/Registry(Adobe)
|
||||
/Supplement 0
|
||||
>>
|
||||
/FontDescriptor 11 0 R
|
||||
/BaseFont/SNFKNA+Times#20New#20Roman
|
||||
/W [6[500]11[333]12[333]15[250]16[333]17[250]21[500]29[277]36[722]37[666]38[666]39[722]40[610]41[556]42[722]43[722]44[333]45[389]47[610]48[889]49[722]50[722]51[556]52[722]53[666]54[556]55[610]58[943]59[722]68[443]69[500]70[443]72[443]74[500]76[277]78[500]79[277]80[777]81[500]82[500]83[500]85[333]86[389]87[277]88[500]89[500]90[722]92[500]93[443]571[574]572[666]573[578]578[722]582[889]584[722]585[722]586[556]587[666]588[610]589[708]590[790]602[443]603[508]604[472]605[410]606[508]607[443]608[690]609[395]610[535]611[535]612[485]613[499]614[632]615[535]616[500]617[535]618[500]619[443]620[437]621[500]622[647]623[500]624[535]625[502]626[770]629[671]630[456]632[747]633[459]]
|
||||
>>
|
||||
endobj
|
||||
14 0 obj
|
||||
<<
|
||||
/Type/Font
|
||||
/Subtype/Type0
|
||||
/Encoding/Identity-H
|
||||
/ToUnicode 12 0 R
|
||||
/BaseFont/SNFKNA+Times#20New#20Roman
|
||||
/DescendantFonts[13 0 R]
|
||||
>>
|
||||
endobj
|
||||
15 0 obj
|
||||
<<
|
||||
/Length1 56112
|
||||
/Filter/FlateDecode
|
||||
/Length 21689
|
||||
>>
|
||||
stream
|
||||
xœì½ xTEÖ7~ê.½¥“ÞÓ<C39E>t’“<C2BB>ÎY !<21>4K‚ÙeŠâ"nˆ£££¸<C2A3>:îÊ̈bp—}ÝÐ÷T܉23ˆŽ’¾ÿ_Uß!¨8ßû¾ÿçù¾' ¿>Uu«êV<C3AA>:uΩ¥1"2Ój’É>oÅÁ3>ú÷<1F>r‘©xáÒ“OtëÙv„Ÿ#2ÔŸü›•ßªÿ"²™ˆ"o,Z0gþ¾ð´sˆ*÷ ÌÀEHp)™(_åC<¼è´3ÎnÛŸ¯#Sþ›%óæHkOFÙ–"^}Úœ³—ú¯7ÜN´ó>ä.]¶`©4kv!âxŸk‘ú[
|
||||
¨ã²äß“ŸHûØ|«RS(~ª¶Gv±púO„ÖR˜>§ëi;µÐ’L
¬”¦‘Â|”A«¡qÌN^R™…
|
||||
)D㨙<4–>a©´‰Ð—¬‘.dšNäQ¥Ó0úÝÎFi_Ð…ô7v
|
||||
mDéûXŒ
|
||||
h<í¦IÔ¬=ŒwÕÒº‰¥Q |