using System.Data; using System.Diagnostics; namespace Nyanlabs.Umogen.Core.Models; public class UmoDocumentResult(UmoDoctype type, Person employee, IEntity employer, ValidTime? validity, string? content) { public UmoDoctype DocType { get; } = type; public Person Employee { get; } = employee; public IEntity Employer { get; } = employer; public ValidTime? Validity { get; } = validity; public string? Content { get; } = content; const string ISSUE_DATE = "$DATETIME_ISSUE", ENACT_DATE = "$DATETIME", EMPLOYER = "$EMPLOYER", EMPLOYEE = "$EMPLOYEE", VALID_TIME = "$VALIDITY_TIME", WORK_TYPE = "$WORK_TYPE", DYNAMIC_DATA = "$WORK_DYNAMIC_DATA", START_DATE = "$WORK_START_DATE"; public async Task ProcessPdf() { string xml = await File.ReadAllTextAsync(DocType.TemplateDoc()); xml = xml.Replace(EMPLOYER, Employer.SerializeToDocument()) .Replace(EMPLOYEE, Employee.SerializeToDocument()) .Replace(VALID_TIME, (Validity ?? ValidTime.Invalid).SerializeToDocument()) .Replace(ENACT_DATE, DateTime.Now.ToString("dd.MM.yyyy")) .Replace(ISSUE_DATE, DateTime.Now.ToString("dd.MM.yyyy")) .Replace(DYNAMIC_DATA, Content); string tmp = Path.GetTempFileName(); await File.WriteAllTextAsync(tmp, xml); await Task.Run(async () => { var proc = Process.Start("soffice", $"--headless --convert-to pdf {tmp}"); await proc.WaitForExitAsync(); if (proc.ExitCode != 0) { throw new DataException("invaliddddd"); } }); byte[] data = await File.ReadAllBytesAsync(Path.ChangeExtension(tmp, "pdf")); return data; } }