PDF készítés DevExpressel.

This commit is contained in:
2025-04-02 13:01:49 +02:00
parent 12bf69aadd
commit 90637b3848
9 changed files with 114 additions and 109 deletions
@@ -39,6 +39,30 @@ namespace WorkFlowCheck.API.Controllers
return retVal;
}
[HttpGet("CreatePDF/{id}")]
public async Task<ApiResponseDTO<byte[]>> CreatePDF(int id)
{
var retVal = new ApiResponseDTO<byte[]>()
{
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<ApiResponseDTO<List<CheckListHeaderDTO>>> GetAllCheckListHeadersAsync()
{
Binary file not shown.
@@ -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;
}
}
}
@@ -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];
}
}
}
+1 -1
View File
@@ -7,8 +7,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Aspose.Words" Version="25.3.0" />
<PackageReference Include="AutoMapper" Version="13.0.1" />
<PackageReference Include="DevExpress.Document.Processor" Version="24.2.6" />
<PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" />
<PackageReference Include="Serilog.AspNetCore" Version="8.0.3" />
</ItemGroup>
@@ -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 ()
@@ -22,14 +22,37 @@ namespace WorkFlowCheck.Web.Pages.CheckList.CheckListHeader
}
public async Task OnGet()
{
CheckStatus = _checkListService.GetCheckStatus();
CheckStatus = _checkListService.GetCheckStatus();
}
public async Task<JsonResult> OnGetLoadCheckListHeaders()
{
var results = await _checkListService.GetAllCheckListHeaderAsync();
return new JsonResult(new { data = results });
}
public async Task<IActionResult> 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 });
}
}
}
}
@@ -15,7 +15,7 @@ namespace WorkFlowCheck.Web.Services
public CheckListService(HttpClient httpClient, IConfiguration configuration, IHttpContextAccessor httpContextAccessor) : base(httpClient, configuration, httpContextAccessor)
{
}
public async Task<List<CheckListHeaderDTO>> GetAllCheckListHeaderAsync()
{
var endpoint = $"{_httpClient.BaseAddress}api/CheckList/GetAllCheckListHeaders";
@@ -60,6 +60,27 @@ namespace WorkFlowCheck.Web.Services
}
public async Task<ApiResponseDTO<CheckListHeaderDTO>> UpdateCheckListHeader(CheckListHeaderDTO checkListHeaderDTO) => throw new NotImplementedException();
public async Task<ApiResponseDTO<byte[]>> CreatePDF(int id)
{
var retVal = new ApiResponseDTO<byte[]>();
var endpoint = $"{_httpClient.BaseAddress}api/CheckList/CreatePDF/{id}";
try
{
var response = await _httpClient.GetFromJsonAsync<ApiResponseDTO<byte[]>>(endpoint);
if (response != null)
{
if (response.IsSuccess)
{
return response;
}
}
}
catch (Exception ex)
{
Log.Error(ex.Message);
}
return retVal;
}
public async Task<List<CheckListTemplateHeaderDTO>> GetAllCheckListTemplateHeaderAsync()
{
@@ -250,5 +271,5 @@ namespace WorkFlowCheck.Web.Services
.GetCustomAttribute<DisplayAttribute>()?.Name ?? enumValue.ToString();
}
}
}
@@ -8,6 +8,7 @@ namespace WorkFlowCheck.Web.Services.Interfaces
Task<CheckListHeaderDTO> GetCheckListHeader(int id);
Task<List<CheckListHeaderDTO>> GetAllCheckListHeaderAsync();
Task<ApiResponseDTO<CheckListHeaderDTO>> UpdateCheckListHeader(CheckListHeaderDTO checkListHeaderDTO);
Task<ApiResponseDTO<byte[]>> CreatePDF(int id);
Task<CheckListTemplateHeaderDTO> GetCheckListTemplateHeader(int id);
Task<List<CheckListTemplateHeaderDTO>> GetAllCheckListTemplateHeaderAsync();