|
@@ -0,0 +1,396 @@
|
|
|
|
+using iText.Kernel.Colors;
|
|
|
|
+using iText.Kernel.Font;
|
|
|
|
+using iText.Kernel.Pdf;
|
|
|
|
+using iText.Layout;
|
|
|
|
+using iText.Layout.Element;
|
|
|
|
+using iText.Layout.Properties;
|
|
|
|
+using MTWorkHR.Core.Entities;
|
|
|
|
+using System;
|
|
|
|
+using System.Collections.Generic;
|
|
|
|
+using System.Linq;
|
|
|
|
+using System.Text;
|
|
|
|
+using System.Threading.Tasks;
|
|
|
|
+using DevExpress.CodeParser;
|
|
|
|
+using iText.Kernel.Events;
|
|
|
|
+using Event = iText.Kernel.Events.Event;
|
|
|
|
+using MTWorkHR.Core.Global;
|
|
|
|
+using MTWorkHR.Infrastructure.Entities;
|
|
|
|
+using Microsoft.Extensions.Options;
|
|
|
|
+
|
|
|
|
+namespace MTWorkHR.Infrastructure.Reports
|
|
|
|
+{
|
|
|
|
+ public class ContractPdfGenerator
|
|
|
|
+ {
|
|
|
|
+ public async Task<byte[]> GenerateContractPdf(string outputPath, ContractDetail contractData)
|
|
|
|
+ {
|
|
|
|
+ try {
|
|
|
|
+ // Use MemoryStream to generate the PDF in memory
|
|
|
|
+ using (MemoryStream memoryStream = new MemoryStream())
|
|
|
|
+ {
|
|
|
|
+ using (PdfWriter writer = new PdfWriter(memoryStream))
|
|
|
|
+ using (PdfDocument pdf = new PdfDocument(writer))
|
|
|
|
+ using (Document document = new Document(pdf))
|
|
|
|
+ {
|
|
|
|
+ PdfFont boldFont = PdfFontFactory.CreateFont(iText.IO.Font.Constants.StandardFonts.HELVETICA_BOLD);
|
|
|
|
+ PdfFont regularFont = PdfFontFactory.CreateFont(iText.IO.Font.Constants.StandardFonts.HELVETICA);
|
|
|
|
+
|
|
|
|
+ // Timestamp and Title
|
|
|
|
+ document.Add(new Paragraph($"{DateTime.Now:dd/MM/yyyy HH:mm:ss} .")
|
|
|
|
+ .SetFont(regularFont)
|
|
|
|
+ .SetFontSize(10));
|
|
|
|
+ document.Add(new Paragraph("Employee Contract")
|
|
|
|
+ .SetFont(boldFont)
|
|
|
|
+ .SetFontSize(20)
|
|
|
|
+ .SetMarginBottom(20)
|
|
|
|
+ .SetTextAlignment(TextAlignment.CENTER));
|
|
|
|
+
|
|
|
|
+ // Header
|
|
|
|
+ // document.Add(new Paragraph("Contract Agreement")
|
|
|
|
+ // .SetFont(boldFont)
|
|
|
|
+ // .SetFontSize(20)
|
|
|
|
+ // .SetTextAlignment(TextAlignment.CENTER));
|
|
|
|
+
|
|
|
|
+ // Company Information
|
|
|
|
+ document.Add(new Paragraph("Company Information:")
|
|
|
|
+ .SetFont(boldFont)
|
|
|
|
+ .SetFontSize(12));
|
|
|
|
+ Table companyTable = new Table(new float[] { 1, 3, 1, 1 }).UseAllAvailableWidth();
|
|
|
|
+ companyTable.AddCell(CreateCell("Name:", boldFont));
|
|
|
|
+ companyTable.AddCell(CreateCell(contractData.CompanyName, regularFont));
|
|
|
|
+ companyTable.AddCell(CreateCell("CR:", boldFont));
|
|
|
|
+ companyTable.AddCell(CreateCell(contractData.CompanyCR, regularFont));
|
|
|
|
+ companyTable.AddCell(CreateCell("Email:", boldFont));
|
|
|
|
+ companyTable.AddCell(CreateCell(contractData.CompanyEmail, regularFont));
|
|
|
|
+ companyTable.AddCell(CreateCell("Phone:", boldFont));
|
|
|
|
+ companyTable.AddCell(CreateCell(contractData.CompanyPhone, regularFont));
|
|
|
|
+ companyTable.AddCell(CreateCell("Address:", boldFont));
|
|
|
|
+ companyTable.AddCell(CreateCell(contractData.CompanyAddress, regularFont, 3));
|
|
|
|
+ document.Add(companyTable);
|
|
|
|
+
|
|
|
|
+ // Company Representative
|
|
|
|
+ document.Add(new Paragraph("Company Representative:")
|
|
|
|
+ .SetFont(boldFont)
|
|
|
|
+ .SetFontSize(12)
|
|
|
|
+ .SetMarginTop(10));
|
|
|
|
+
|
|
|
|
+ //Representative Table
|
|
|
|
+ Table repTable = new Table(new float[] { 1, 3 }).UseAllAvailableWidth();
|
|
|
|
+
|
|
|
|
+ // Row 1: Name
|
|
|
|
+ repTable.AddCell(CreateCell("Name:", boldFont));
|
|
|
|
+ repTable.AddCell(CreateCell(contractData.CompanyRepresentativeName, regularFont));
|
|
|
|
+
|
|
|
|
+ // Row 2: Passport
|
|
|
|
+ repTable.AddCell(CreateCell("Passport:", boldFont));
|
|
|
|
+ repTable.AddCell(CreateCell(contractData.CompanyRepresentativePassport, regularFont));
|
|
|
|
+
|
|
|
|
+ // Row 3: Phone
|
|
|
|
+ repTable.AddCell(CreateCell("Phone:", boldFont));
|
|
|
|
+ repTable.AddCell(CreateCell(contractData.CompanyRepresentativePhone, regularFont));
|
|
|
|
+
|
|
|
|
+ // Row 4: Email
|
|
|
|
+ repTable.AddCell(CreateCell("Email:", boldFont));
|
|
|
|
+ repTable.AddCell(CreateCell(contractData.CompanyRepresentativeEmail, regularFont));
|
|
|
|
+
|
|
|
|
+ // Row 5: Position
|
|
|
|
+ repTable.AddCell(CreateCell("Position:", boldFont));
|
|
|
|
+ repTable.AddCell(CreateCell(contractData.CompanyRepresentativePosition, regularFont));
|
|
|
|
+
|
|
|
|
+ document.Add(repTable);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //Employee Information
|
|
|
|
+ document.Add(new Paragraph("Employee Information:")
|
|
|
|
+ .SetFont(boldFont)
|
|
|
|
+ .SetFontSize(12)
|
|
|
|
+ .SetMarginTop(10));
|
|
|
|
+ document.Add(new Paragraph($"Name: \t {contractData.EmployeeName}")
|
|
|
|
+ .SetFont(regularFont));
|
|
|
|
+ document.Add(new Paragraph($"Passport: \t {contractData.EmployeePassport}")
|
|
|
|
+ .SetFont(regularFont));
|
|
|
|
+ document.Add(new Paragraph($"Date Of Birth: \t {contractData.EmployeeDateOfBirth:dd/MM/yyyy}")
|
|
|
|
+ .SetFont(regularFont));
|
|
|
|
+ document.Add(new Paragraph($"Phone: \t {contractData.EmployeePhone}")
|
|
|
|
+ .SetFont(regularFont));
|
|
|
|
+ document.Add(new Paragraph($"University: \t {contractData.EmployeeUniversity}")
|
|
|
|
+ .SetFont(regularFont));
|
|
|
|
+ document.Add(new Paragraph($"Work Country: \t {contractData.WorkCountry}")
|
|
|
|
+ .SetFont(regularFont));
|
|
|
|
+ document.Add(new Paragraph($"Job: \t {contractData.JobTitleName}")
|
|
|
|
+ .SetFont(regularFont));
|
|
|
|
+ document.Add(new Paragraph($"Job Number: \t {contractData.JobNumber}")
|
|
|
|
+ .SetFont(regularFont));
|
|
|
|
+ document.Add(new Paragraph($"Job Description: \t {contractData.JobDescription}")
|
|
|
|
+ .SetFont(regularFont));
|
|
|
|
+
|
|
|
|
+ //Contract Details
|
|
|
|
+ document.Add(new Paragraph("Contract")
|
|
|
|
+ .SetFont(boldFont)
|
|
|
|
+ .SetFontSize(12)
|
|
|
|
+ .SetMarginTop(10));
|
|
|
|
+ Table contractTable = new Table(new float[] { 1, 3, 1, 3 }).UseAllAvailableWidth();
|
|
|
|
+ contractTable.AddCell(CreateCell("Start Date:", boldFont));
|
|
|
|
+ contractTable.AddCell(CreateCell($"{contractData.StartDate:dd/MM/yyyy}", regularFont));
|
|
|
|
+ contractTable.AddCell(CreateCell("End Date:", boldFont));
|
|
|
|
+ contractTable.AddCell(CreateCell($"{contractData.EndDate:dd/MM/yyyy}", regularFont));
|
|
|
|
+ contractTable.AddCell(CreateCell("Duration:", boldFont));
|
|
|
|
+ contractTable.AddCell(CreateCell($"{contractData.ContractDuration}", regularFont));
|
|
|
|
+ contractTable.AddCell(CreateCell("Contract Type:", boldFont));
|
|
|
|
+ contractTable.AddCell(CreateCell((ContractTypeEnum)contractData.ContractTypeId + "", regularFont));
|
|
|
|
+ contractTable.AddCell(CreateCell("Vacation Days:", boldFont));
|
|
|
|
+ contractTable.AddCell(CreateCell($"{contractData.VacationDays}", regularFont));
|
|
|
|
+ contractTable.AddCell(CreateCell("Trial Period:", boldFont));
|
|
|
|
+ contractTable.AddCell(CreateCell($"{contractData.TrialPeriod}", regularFont));
|
|
|
|
+ contractTable.AddCell(CreateCell("Termination Notice Period:", boldFont));
|
|
|
|
+ contractTable.AddCell(CreateCell($"{contractData.NoticePeriodBeforeTermination}", regularFont));
|
|
|
|
+ document.Add(contractTable);
|
|
|
|
+
|
|
|
|
+ // Work Time
|
|
|
|
+ document.Add(new Paragraph("Work Time")
|
|
|
|
+ .SetFont(boldFont)
|
|
|
|
+ .SetFontSize(12)
|
|
|
|
+ .SetMarginTop(10));
|
|
|
|
+ document.Add(new Paragraph($"Working Days: \t {contractData.WorkingDays}")
|
|
|
|
+ .SetFont(regularFont));
|
|
|
|
+ document.Add(new Paragraph($"Working Hours: \t {contractData.WorkingHours}")
|
|
|
|
+ .SetFont(regularFont));
|
|
|
|
+
|
|
|
|
+ // Salary
|
|
|
|
+ document.Add(new Paragraph("Salary")
|
|
|
|
+ .SetFont(boldFont)
|
|
|
|
+ .SetFontSize(12)
|
|
|
|
+ .SetMarginTop(10));
|
|
|
|
+ document.Add(new Paragraph($"Amount: \t {contractData.Salary:F2} {contractData.Currency}")
|
|
|
|
+ .SetFont(regularFont));
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if (contractData.FixedAllowances != null && contractData.FixedAllowances.Count > 0)
|
|
|
|
+ {
|
|
|
|
+ // Allowances
|
|
|
|
+ document.Add(new Paragraph("Allowances")
|
|
|
|
+ .SetFont(boldFont)
|
|
|
|
+ .SetFontSize(12)
|
|
|
|
+ .SetMarginTop(10));
|
|
|
|
+
|
|
|
|
+ Table allowanceTable = new Table(new float[] { 2, 1, 2, 1 }).UseAllAvailableWidth();
|
|
|
|
+ allowanceTable.AddHeaderCell(CreateCell("Type", boldFont));
|
|
|
|
+ allowanceTable.AddHeaderCell(CreateCell("Rate", boldFont));
|
|
|
|
+ allowanceTable.AddHeaderCell(CreateCell("Amount", boldFont));
|
|
|
|
+ allowanceTable.AddHeaderCell(CreateCell("Frequency", boldFont));
|
|
|
|
+ foreach (var allowance in contractData.FixedAllowances)
|
|
|
|
+ {
|
|
|
|
+ allowanceTable.AddCell(CreateCell(allowance.AllowanceType + "", regularFont));
|
|
|
|
+ allowanceTable.AddCell(CreateCell($"{allowance.PaymentType:F2}", regularFont));
|
|
|
|
+ allowanceTable.AddCell(CreateCell($"{allowance.EntitlementAmount:F2}", regularFont));
|
|
|
|
+ allowanceTable.AddCell(CreateCell($"{allowance.EntitlementPercent}", regularFont));
|
|
|
|
+ }
|
|
|
|
+ document.Add(allowanceTable);
|
|
|
|
+ }
|
|
|
|
+ //ProjectStages
|
|
|
|
+ if (contractData.ProjectStages != null && contractData.ProjectStages.Count >0)
|
|
|
|
+ {
|
|
|
|
+ // Allowances
|
|
|
|
+ document.Add(new Paragraph("Project Stages")
|
|
|
|
+ .SetFont(boldFont)
|
|
|
|
+ .SetFontSize(12)
|
|
|
|
+ .SetMarginTop(10));
|
|
|
|
+ Table ProjectStagesTable = new Table(new float[] { 1, 3 }).UseAllAvailableWidth();
|
|
|
|
+ ProjectStagesTable.AddHeaderCell(CreateCell("Title", boldFont));
|
|
|
|
+ ProjectStagesTable.AddHeaderCell(CreateCell("Scope of work", boldFont));
|
|
|
|
+ foreach (var allowance in contractData.ProjectStages)
|
|
|
|
+ {
|
|
|
|
+ ProjectStagesTable.AddCell(CreateCell(allowance.Title + "", regularFont));
|
|
|
|
+ ProjectStagesTable.AddCell(CreateCell($"{allowance.ScopeOfWork:F2}", regularFont));
|
|
|
|
+ }
|
|
|
|
+ document.Add(ProjectStagesTable);
|
|
|
|
+ }
|
|
|
|
+ //ContractTasks
|
|
|
|
+
|
|
|
|
+ if (contractData.ContractTasks != null && contractData.ContractTasks.Count > 0)
|
|
|
|
+ {
|
|
|
|
+ // Allowances
|
|
|
|
+ document.Add(new Paragraph("Contract Tasks")
|
|
|
|
+ .SetFont(boldFont)
|
|
|
|
+ .SetFontSize(12)
|
|
|
|
+ .SetMarginTop(10));
|
|
|
|
+ Table ContractTasksTable = new Table(new float[] { 1, 3, 1, 3 }).UseAllAvailableWidth();
|
|
|
|
+ ContractTasksTable.AddHeaderCell(CreateCell("Title", boldFont));
|
|
|
|
+ ContractTasksTable.AddHeaderCell(CreateCell("Scope of work", boldFont));
|
|
|
|
+ ContractTasksTable.AddHeaderCell(CreateCell("StartDate", boldFont));
|
|
|
|
+ ContractTasksTable.AddHeaderCell(CreateCell("Amount", boldFont));
|
|
|
|
+ foreach (var allowance in contractData.ContractTasks)
|
|
|
|
+ {
|
|
|
|
+ ContractTasksTable.AddCell(CreateCell(allowance.Title + "", regularFont));
|
|
|
|
+ ContractTasksTable.AddCell(CreateCell($"{allowance.ScopeOfWork:F2}", regularFont));
|
|
|
|
+ ContractTasksTable.AddCell(CreateCell($"{allowance.StartDate:dd/MM/yyyy}", regularFont));
|
|
|
|
+ ContractTasksTable.AddCell(CreateCell($"{allowance.Amount:F2}", regularFont));
|
|
|
|
+ }
|
|
|
|
+ document.Add(ContractTasksTable);
|
|
|
|
+ }
|
|
|
|
+ // Page Numbers
|
|
|
|
+ pdf.AddEventHandler(PdfDocumentEvent.END_PAGE, new PageNumberEventHandler(document));
|
|
|
|
+ }
|
|
|
|
+ byte[] pdfBytes = memoryStream.ToArray();
|
|
|
|
+
|
|
|
|
+ // If you still want to save to file, you can do it here
|
|
|
|
+ //if (!string.IsNullOrEmpty(outputPath))
|
|
|
|
+ //{
|
|
|
|
+ // await File.WriteAllBytesAsync(outputPath, pdfBytes);
|
|
|
|
+ //}
|
|
|
|
+
|
|
|
|
+ return pdfBytes;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //return UploadToAzureBlob(pdfBytes, blobName);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ catch (Exception e)
|
|
|
|
+ {
|
|
|
|
+ throw e;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public byte[] GeneratePdf()
|
|
|
|
+ {
|
|
|
|
+ //_logger.LogInformation("Generating PDF...");
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ using (var stream = new MemoryStream())
|
|
|
|
+ {
|
|
|
|
+ PdfWriter writer = new PdfWriter(stream);
|
|
|
|
+ PdfDocument pdf = new PdfDocument(writer);
|
|
|
|
+ Document document = new Document(pdf);
|
|
|
|
+ document.Add(new Paragraph("Hello, Azure App Service!"));
|
|
|
|
+ document.Close();
|
|
|
|
+ // _logger.LogInformation("PDF generated successfully.");
|
|
|
|
+ return stream.ToArray();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ catch (Exception ex)
|
|
|
|
+ {
|
|
|
|
+ // _logger.LogError(ex, "Failed to generate PDF.");
|
|
|
|
+ throw;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //private string UploadToAzureBlob(byte[] pdfBytes, string blobName)
|
|
|
|
+ //{
|
|
|
|
+ // // Create a BlobServiceClient
|
|
|
|
+ // BlobServiceClient blobServiceClient = new BlobServiceClient(_storageSettings.ConnectionString);
|
|
|
|
+
|
|
|
|
+ // // Get a reference to the container
|
|
|
|
+ // BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(_storageSettings.ContainerName);
|
|
|
|
+
|
|
|
|
+ // // Create the container if it doesn’t exist
|
|
|
|
+ // containerClient.CreateIfNotExists();
|
|
|
|
+
|
|
|
|
+ // // Get a reference to the blob
|
|
|
|
+ // BlobClient blobClient = containerClient.GetBlobClient(blobName);
|
|
|
|
+
|
|
|
|
+ // // Upload the PDF bytes
|
|
|
|
+ // using (MemoryStream uploadStream = new MemoryStream(pdfBytes))
|
|
|
|
+ // {
|
|
|
|
+ // blobClient.Upload(uploadStream, overwrite: true);
|
|
|
|
+ // }
|
|
|
|
+
|
|
|
|
+ // // Return the Blob URL
|
|
|
|
+ // return blobClient.Uri.ToString();
|
|
|
|
+ //}
|
|
|
|
+ private Cell CreateCell(string text, PdfFont font, int colspan = 1)
|
|
|
|
+ {
|
|
|
|
+ return new Cell(1, colspan).Add(new Paragraph(text).SetFont(font).SetFontSize(10));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private class PageNumberEventHandler : IEventHandler
|
|
|
|
+ {
|
|
|
|
+ private readonly Document _document;
|
|
|
|
+
|
|
|
|
+ public PageNumberEventHandler(Document document)
|
|
|
|
+ {
|
|
|
|
+ _document = document;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void HandleEvent(Event @event)
|
|
|
|
+ {
|
|
|
|
+ PdfDocumentEvent docEvent = (PdfDocumentEvent)@event;
|
|
|
|
+ PdfDocument pdf = docEvent.GetDocument();
|
|
|
|
+ PdfPage page = docEvent.GetPage();
|
|
|
|
+ int pageNumber = pdf.GetPageNumber(page);
|
|
|
|
+ PdfFont font = PdfFontFactory.CreateFont(iText.IO.Font.Constants.StandardFonts.HELVETICA);
|
|
|
|
+
|
|
|
|
+ _document.ShowTextAligned(
|
|
|
|
+ new Paragraph($"Page {pageNumber}").SetFont(font).SetFontSize(10),
|
|
|
|
+ 550, 20, pageNumber, TextAlignment.RIGHT, VerticalAlignment.BOTTOM, 0);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+//public class ContractPdfGenerator
|
|
|
|
+// {
|
|
|
|
+//public void GenerateContractPdf(string outputPath, Contract contractData)
|
|
|
|
+//{
|
|
|
|
+// using (PdfWriter writer = new PdfWriter(outputPath))
|
|
|
|
+// using (PdfDocument pdf = new PdfDocument(writer))
|
|
|
|
+// using (Document document = new Document(pdf))
|
|
|
|
+// {
|
|
|
|
+// PdfFont boldFont = PdfFontFactory.CreateFont(iText.IO.Font.Constants.StandardFonts.HELVETICA_BOLD);
|
|
|
|
+// PdfFont regularFont = PdfFontFactory.CreateFont(iText.IO.Font.Constants.StandardFonts.HELVETICA);
|
|
|
|
+
|
|
|
|
+// // Header
|
|
|
|
+// document.Add(new Paragraph("Contract Agreement")
|
|
|
|
+// .SetFont(boldFont)
|
|
|
|
+// .SetFontSize(20)
|
|
|
|
+// .SetTextAlignment(TextAlignment.CENTER));
|
|
|
|
+
|
|
|
|
+// // Parties
|
|
|
|
+// document.Add(new Paragraph($"\nThis contract is made on {DateTime.Now:MMMM dd, yyyy}, between:")
|
|
|
|
+// .SetFont(regularFont));
|
|
|
|
+// document.Add(new Paragraph()
|
|
|
|
+// .Add(new Text("Party A: ").SetFont(boldFont))
|
|
|
|
+// .Add(new Text($"{contractData.CompanyId}\n").SetFont(regularFont))
|
|
|
|
+// .Add(new Text("Party B: ").SetFont(boldFont))
|
|
|
|
+// .Add(new Text($"{contractData.JobTitleName}").SetFont(regularFont)));
|
|
|
|
+
|
|
|
|
+// // Terms Table
|
|
|
|
+// Table table = new Table(UnitValue.CreatePercentArray(new float[] { 1, 3 })).UseAllAvailableWidth();
|
|
|
|
+// table.AddHeaderCell(new Cell().Add(new Paragraph("Clause").SetFont(boldFont)).SetBackgroundColor(ColorConstants.LIGHT_GRAY));
|
|
|
|
+// table.AddHeaderCell(new Cell().Add(new Paragraph("Description").SetFont(boldFont)).SetBackgroundColor(ColorConstants.LIGHT_GRAY));
|
|
|
|
+// foreach (var term in contractData.ProjectStages)
|
|
|
|
+// {
|
|
|
|
+// table.AddCell(new Cell().Add(new Paragraph(term.Title).SetFont(regularFont)));
|
|
|
|
+// table.AddCell(new Cell().Add(new Paragraph(term.ScopeOfWork).SetFont(regularFont)));
|
|
|
|
+// }
|
|
|
|
+// document.Add(table);
|
|
|
|
+
|
|
|
|
+// // Signatures
|
|
|
|
+// document.Add(new Paragraph("\nSignatures:").SetFont(boldFont).SetFontSize(14));
|
|
|
|
+// document.Add(new Paragraph("___________________________\nParty A Representative").SetFont(regularFont));
|
|
|
|
+// document.Add(new Paragraph("___________________________\nParty B Representative").SetFont(regularFont));
|
|
|
|
+
|
|
|
|
+// // Page numbers (via event handler if needed)
|
|
|
|
+// pdf.AddEventHandler(PdfDocumentEvent.END_PAGE, new PageNumberEventHandler(document));
|
|
|
|
+// }
|
|
|
|
+//}
|
|
|
|
+
|
|
|
|
+//private class PageNumberEventHandler : IEventHandler
|
|
|
|
+//{
|
|
|
|
+// private readonly Document _document;
|
|
|
|
+// public PageNumberEventHandler(Document document) => _document = document;
|
|
|
|
+
|
|
|
|
+// public void HandleEvent(iText.Kernel.Events.Event @event)
|
|
|
|
+// {
|
|
|
|
+// PdfDocumentEvent docEvent = (PdfDocumentEvent)@event;
|
|
|
|
+// PdfDocument pdf = docEvent.GetDocument();
|
|
|
|
+// PdfPage page = docEvent.GetPage();
|
|
|
|
+// int pageNumber = pdf.GetPageNumber(page);
|
|
|
|
+// PdfFont font = PdfFontFactory.CreateFont(iText.IO.Font.Constants.StandardFonts.HELVETICA);
|
|
|
|
+
|
|
|
|
+// _document.ShowTextAligned(
|
|
|
|
+// new Paragraph($"Page {pageNumber}").SetFont(font).SetFontSize(10),
|
|
|
|
+// 550, 20, pageNumber, TextAlignment.RIGHT, VerticalAlignment.BOTTOM, 0);
|
|
|
|
+// }
|
|
|
|
+//}
|
|
|
|
+// }
|
|
|
|
+//}
|
|
|
|
+
|