diff --git a/src/WorkFlowCheck.API/Controllers/CheckListController.cs b/src/WorkFlowCheck.API/Controllers/CheckListController.cs index af37a54..6436d79 100644 --- a/src/WorkFlowCheck.API/Controllers/CheckListController.cs +++ b/src/WorkFlowCheck.API/Controllers/CheckListController.cs @@ -39,6 +39,30 @@ namespace WorkFlowCheck.API.Controllers return retVal; } + [HttpGet("CreatePDF/{id}")] + public async Task> CreatePDF(int id) + { + var retVal = new ApiResponseDTO() + { + IsSuccess = true, + }; + var checkListHeader = await _checkListService.GetCheckListHeaderAsync(id); + var response = _checkListService.CreatePDF(id); + + if (response != null) + { + + retVal.IsSuccess = true; + retVal.Data = response; + } + else + { + retVal.IsSuccess = false; + retVal.Errors.Add("No data!"); + } + + return retVal; + } [HttpGet("GetAllCheckListHeaders")] public async Task>> GetAllCheckListHeadersAsync() { diff --git a/src/WorkFlowCheck.API/Pdf/CheckList_Template_V1.docx b/src/WorkFlowCheck.API/Pdf/CheckList_Template_V1.docx new file mode 100644 index 0000000..b0a99cf Binary files /dev/null and b/src/WorkFlowCheck.API/Pdf/CheckList_Template_V1.docx differ diff --git a/src/WorkFlowCheck.BL/DocumentGenerator/DokumentumGenerator.cs b/src/WorkFlowCheck.BL/DocumentGenerator/DokumentumGenerator.cs index c0622b0..42ea204 100644 --- a/src/WorkFlowCheck.BL/DocumentGenerator/DokumentumGenerator.cs +++ b/src/WorkFlowCheck.BL/DocumentGenerator/DokumentumGenerator.cs @@ -1,108 +1,35 @@ -using Aspose.Words; -using Aspose.Words.Tables; -using Serilog; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using DevExpress.XtraRichEdit; namespace WorkFlowCheck.BL.DocumentGenerator { public class DokumentumGenerator { - static DokumentumGenerator() + public static byte[] DocxToPdf(byte[] wordBytes) { - Aspose.Words.License license = new Aspose.Words.License(); - - try + using (MemoryStream inputStream = new MemoryStream(wordBytes)) + using (MemoryStream outputStream = new MemoryStream()) { - license.SetLicense("Aspose.Words.lic"); - Log.Information("License set successfully."); + try + { + // RichEditDocumentServer használata a konverzióhoz + using (RichEditDocumentServer wordProcessor = new RichEditDocumentServer()) + { + // Dokumentum betöltése a byte tömbből + wordProcessor.LoadDocument(inputStream, DevExpress.XtraRichEdit.DocumentFormat.OpenXml); + + // PDF formátumba mentés a memóriafolyamba + wordProcessor.ExportToPdf(outputStream); + + // PDF byte tömb visszaadása + return outputStream.ToArray(); + } + } + catch (Exception ex) + { + Console.WriteLine("Hiba a konverzió során: " + ex.Message); + return new byte[0]; + } } - catch (Exception e) - { - Log.Error(e, "\nThere was an error setting the license: " + e.Message); - } - } - - public static byte[] HtmlToDocx(string html) - { - byte[] generated = Encoding.UTF8.GetBytes(html); - var docHTML = new Aspose.Words.Document(); - - Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(docHTML); - builder.InsertHtml(html); - - docHTML.CompatibilityOptions.OptimizeFor(Aspose.Words.Settings.MsWordVersion.Word2016); - - MemoryStream outStream = new MemoryStream(); - docHTML.Save(outStream, Aspose.Words.SaveFormat.Docx); - - generated = outStream.ToArray(); - - outStream.Dispose(); - - return generated; - } - - public static byte[] HtmlToPdf(string html) - { - byte[] generated = Encoding.UTF8.GetBytes(html); - - Stream inStream = new MemoryStream(generated); - var docHTML = new Aspose.Words.Document(inStream); - MemoryStream outStream = new MemoryStream(); - docHTML.Save(outStream, Aspose.Words.SaveFormat.Pdf); - - generated = outStream.ToArray(); - - inStream.Dispose(); - outStream.Dispose(); - - return generated; - } - - public static byte[] DocxToPdf(byte[] generated) - { - Stream inStream = new MemoryStream(generated); - var doc = new Aspose.Words.Document(inStream); - MemoryStream outStream = new MemoryStream(); - doc.Save(outStream, Aspose.Words.SaveFormat.Pdf); - - generated = outStream.ToArray(); - - inStream.Dispose(); - outStream.Dispose(); - - return generated; - } - - public static byte[] DocxToPdfForTopic(byte[] generated) - { - Stream inStream = new MemoryStream(generated); - var doc = new Aspose.Words.Document(inStream); - - doc.Styles.DefaultFont.Name = "Times New Roman"; - doc.Styles.DefaultFont.Size = 12; - - var collection = doc.GetChildNodes(NodeType.Row, true); - - foreach (Row row in collection) - { - row.RowFormat.Height = 40; - row.RowFormat.HeightRule = HeightRule.AtLeast; - } - - MemoryStream outStream = new MemoryStream(); - doc.Save(outStream, Aspose.Words.SaveFormat.Pdf); - - generated = outStream.ToArray(); - - inStream.Dispose(); - outStream.Dispose(); - - return generated; } } } diff --git a/src/WorkFlowCheck.BL/Services/CheckListService.cs b/src/WorkFlowCheck.BL/Services/CheckListService.cs index b7738de..c3c8137 100644 --- a/src/WorkFlowCheck.BL/Services/CheckListService.cs +++ b/src/WorkFlowCheck.BL/Services/CheckListService.cs @@ -426,14 +426,22 @@ namespace WorkFlowCheck.BL.Services public byte[] CreatePDF(int checkListHeaderId) { - var location = System.Reflection.Assembly.GetEntryAssembly().Location; - var directory = System.IO.Path.GetDirectoryName(location); - byte[] byteArray = System.IO.File.ReadAllBytes(Path.Combine(directory, "DocumentGenerator", "CheckList_Template_V1.docx")); - SablonGenerator gen = new SablonGenerator(byteArray); + try + { + string pdfDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Pdf"); - byte[] content = gen.CloseAndGetDocument(); + byte[] byteArray = File.ReadAllBytes(Path.Combine(pdfDirectory, "CheckList_Template_V1.docx")); + SablonGenerator gen = new SablonGenerator(byteArray); - return DokumentumGenerator.DocxToPdf(content); + byte[] content = gen.CloseAndGetDocument(); + + return DokumentumGenerator.DocxToPdf(content); + } + catch (Exception ex) + { + Log.Error(ex.Message); + } + return new byte[0]; } } } diff --git a/src/WorkFlowCheck.BL/WorkFlowCheck.BL.csproj b/src/WorkFlowCheck.BL/WorkFlowCheck.BL.csproj index bd3f6b2..dd1a6a6 100644 --- a/src/WorkFlowCheck.BL/WorkFlowCheck.BL.csproj +++ b/src/WorkFlowCheck.BL/WorkFlowCheck.BL.csproj @@ -7,8 +7,8 @@ - + diff --git a/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml b/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml index f78ee59..298fe81 100644 --- a/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml +++ b/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml @@ -115,7 +115,8 @@ $('#tbCheckListHeadersPage').on('click', '.pdf-btn', function () { const row = table.row($(this).closest('tr')).data(); - window.location.href = `@Url.Page("./CheckListHeaderEditPage")?id=${row.id}`; + window.location.href = `@Url.Page("./CheckListHeaderPage")?handler=CreatePDF&id=${row.id}`; + }); $('#tbCheckListHeadersPage').on('click', '.delete-btn', function () diff --git a/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml.cs b/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml.cs index 28533cd..9fcaa80 100644 --- a/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml.cs +++ b/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml.cs @@ -22,14 +22,37 @@ namespace WorkFlowCheck.Web.Pages.CheckList.CheckListHeader } public async Task OnGet() { - CheckStatus = _checkListService.GetCheckStatus(); + CheckStatus = _checkListService.GetCheckStatus(); } - + public async Task OnGetLoadCheckListHeaders() { var results = await _checkListService.GetAllCheckListHeaderAsync(); return new JsonResult(new { data = results }); } + + public async Task OnGetCreatePDF(int id) + { + var checkListHeaderDTO = await _checkListService.GetCheckListHeader(id); + + var response = await _checkListService.CreatePDF(id); + + if (response.IsSuccess) + { + var timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss"); + var fileName = $"PH_{timestamp}_{checkListHeaderDTO.Id}.pdf"; + var result = new FileContentResult(response.Data, "application/pdf") + { + FileDownloadName = fileName, + FileContents = response.Data + }; + return result; + } + else + { + return new JsonResult(new { success = false }); + } + } } } diff --git a/src/WorkFlowCheck.Web/Services/CheckListService.cs b/src/WorkFlowCheck.Web/Services/CheckListService.cs index 512e813..5c7aa80 100644 --- a/src/WorkFlowCheck.Web/Services/CheckListService.cs +++ b/src/WorkFlowCheck.Web/Services/CheckListService.cs @@ -15,7 +15,7 @@ namespace WorkFlowCheck.Web.Services public CheckListService(HttpClient httpClient, IConfiguration configuration, IHttpContextAccessor httpContextAccessor) : base(httpClient, configuration, httpContextAccessor) { } - + public async Task> GetAllCheckListHeaderAsync() { var endpoint = $"{_httpClient.BaseAddress}api/CheckList/GetAllCheckListHeaders"; @@ -60,6 +60,27 @@ namespace WorkFlowCheck.Web.Services } public async Task> UpdateCheckListHeader(CheckListHeaderDTO checkListHeaderDTO) => throw new NotImplementedException(); + public async Task> CreatePDF(int id) + { + var retVal = new ApiResponseDTO(); + var endpoint = $"{_httpClient.BaseAddress}api/CheckList/CreatePDF/{id}"; + try + { + var response = await _httpClient.GetFromJsonAsync>(endpoint); + if (response != null) + { + if (response.IsSuccess) + { + return response; + } + } + } + catch (Exception ex) + { + Log.Error(ex.Message); + } + return retVal; + } public async Task> GetAllCheckListTemplateHeaderAsync() { @@ -250,5 +271,5 @@ namespace WorkFlowCheck.Web.Services .GetCustomAttribute()?.Name ?? enumValue.ToString(); } } - + } diff --git a/src/WorkFlowCheck.Web/Services/Interfaces/ICheckListService.cs b/src/WorkFlowCheck.Web/Services/Interfaces/ICheckListService.cs index 20df9b4..bc92bb7 100644 --- a/src/WorkFlowCheck.Web/Services/Interfaces/ICheckListService.cs +++ b/src/WorkFlowCheck.Web/Services/Interfaces/ICheckListService.cs @@ -8,6 +8,7 @@ namespace WorkFlowCheck.Web.Services.Interfaces Task GetCheckListHeader(int id); Task> GetAllCheckListHeaderAsync(); Task> UpdateCheckListHeader(CheckListHeaderDTO checkListHeaderDTO); + Task> CreatePDF(int id); Task GetCheckListTemplateHeader(int id); Task> GetAllCheckListTemplateHeaderAsync();