We are unable to make a simple class library in NET 5 by trying to compile the following class:
using Abp.Domain.Entities;using Abp.Timing;using Nuagecare.App.NcDocument.Dtos;using Nuagecare.App.NcIncident.Dto;using Nuagecare.Authorization.Users.Dto;using Nuagecare.NcEntity.Dtos;using System;using System.Collections.Generic;using System.Dynamic;using System.Globalization;using System.IO;using System.Linq;using System.Text;using System.Windows.Media;using Telerik.Windows.Documents.Flow.FormatProviders.Docx;using Telerik.Windows.Documents.Flow.Model;using Telerik.Windows.Documents.Flow.Model.Editing;using Telerik.Windows.Documents.Flow.Model.Shapes;using Telerik.Windows.Documents.Flow.Model.Styles;using Telerik.Windows.Documents.Model;using Telerik.Windows.Documents.Primitives;using Telerik.Windows.Documents.Spreadsheet.Model;namespace Nuagecare.DocumentProcessing{ public class DocumentProcessor : IDocumentProcessor { protected readonly ThemableFontFamily DefaultFontFamily = new ThemableFontFamily(new FontFamily("Calibri")); protected readonly ThemableColor DefaultForeground = new ThemableColor(Colors.Black); protected readonly double DefaultFontSize = 14.0; public Byte[] NcEntityMerge(Byte[] input, NcEntityDto ncEntity, string tenancyName, UserEditDto currentUser) { var FirstNames = ncEntity.GetData<AttributeDataDto>("FirstNames"); var Surname = ncEntity.GetData<AttributeDataDto>("Surname"); var Gender = ncEntity.GetData<AttributeDataDto>("Gender"); var Height = ncEntity.GetData<AttributeDataDto>("Height"); var Weight = ncEntity.GetData<AttributeDataDto>("Weight"); var RoomNumber = ncEntity.GetData<AttributeDataDto>("RoomNumber"); var NHSId = ncEntity.GetData<AttributeDataDto>("NHSId"); var DateOfBirth = ""; var Age = ""; try { var sDateOfBirth1 = ncEntity.GetData<AttributeDataDto>("DateOfBirth"); //US (javascript) format DateTime dDateOfBirth = DateTime.ParseExact(sDateOfBirth1.Value, "MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture).ToLocalTime(); DateOfBirth = dDateOfBirth.ToString("dd/MM/yyyy"); Age = CalculateAge(dDateOfBirth).ToString(); } catch (Exception ex) { DateOfBirth = "unknown"; Age = "unknown"; } DocxFormatProvider provider = new DocxFormatProvider(); RadFlowDocument document = provider.Import(input); dynamic mergeRecord = new ExpandoObject(); mergeRecord.DisplayName = ncEntity.DisplayName ?? ""; mergeRecord.FullName = FirstNames.Value + " " + Surname.Value ?? ""; mergeRecord.Gender = Gender.Value ?? ""; mergeRecord.DateOfBirth = DateOfBirth; mergeRecord.Age = Age; mergeRecord.Height = Height.Value ?? "0"; mergeRecord.Weight = Weight.Value ?? "0"; mergeRecord.RoomNumber = RoomNumber.Value ?? "0"; mergeRecord.NHSId = NHSId.Value ?? ""; mergeRecord.TenancyName = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(tenancyName) ?? ""; mergeRecord.CreationTime = Clock.Now.ToString("dddd, dd MMMM yyyy"); mergeRecord.NuagecareRevisions = "1"; mergeRecord.CreatedBy = currentUser.Name + " " + currentUser.Surname; mergeRecord.CreationText = "Created by " + currentUser.Name + " " + currentUser.Surname + " on " + Clock.Now.ToString("dddd, dd MMMM yyyy"); mergeRecord.CreatedHistory = "Created by " + currentUser.Name + " " + currentUser.Surname + " on " + Clock.Now.ToString("dddd, dd MMMM yyyy"); mergeRecord.LastUpdated = Clock.Now.ToString("dddd, dd MMMM yyyy"); List<ExpandoObject> mailMergeDataSource = new List<ExpandoObject>(); mailMergeDataSource.Add(mergeRecord); RadFlowDocument mailMergeResult = document.MailMerge(mailMergeDataSource); //use for testing - outputs to root of Web.Host //using (Stream output = new FileStream("CarePlan.docx", FileMode.OpenOrCreate)) //{ // provider.Export(mailMergeResult, output); //} return provider.Export(mailMergeResult); } public Byte[] ReplaceCarePlanImage(Byte[] input, Byte[] image, IDictionary<string, string> imageNames) { //deprecated - unable find and replace image //possibly user two bookmarks and delete everything in between (i.e. the old image) and replace with the new image DocxFormatProvider provider = new DocxFormatProvider(); RadFlowDocument document = provider.Import(input); RadFlowDocumentEditor editor = new RadFlowDocumentEditor(document); var carePlanTitleParagraph = document.EnumerateChildrenOfType<Paragraph>().Where(p => p.StyleId.Contains("Title")).First(); if (carePlanTitleParagraph != null) { Break br = new Break(document); editor.MoveToInlineEnd(carePlanTitleParagraph.Inlines.Last()); editor.InsertParagraph(); var header = document.Sections.First().Headers.Default; var headerImages = header.EnumerateChildrenOfType<ImageInline>(); var footer = document.Sections.First().Headers.Default; var footerImages = footer.EnumerateChildrenOfType<ImageInline>(); var images = document.EnumerateChildrenOfType<ImageInline>(); foreach (var item in images) { if (headerImages.Contains(item) || footerImages.Contains(item)) { continue; } else { using (MemoryStream memStream = new MemoryStream(image)) { var extension = Path.GetExtension(imageNames["FileName"]); var props = System.Drawing.Image.FromStream(memStream); int Width; int Height; if (props.Width > 350) { Width = 350; Height = Convert.ToInt32((Convert.ToDecimal(props.Height) / Convert.ToDecimal(props.Width)) * 350); } else { Width = props.Width; Height = props.Height; } //editor.InsertImageInline(memStream, extension.Replace(".", ""), new System.Windows.Size(Width, Height)); item.Image.ImageSource = new Telerik.Windows.Documents.Media.ImageSource(memStream, extension.Replace(".", "")); item.Image.Name = Path.GetExtension(imageNames["FileName"]); } } } } return provider.Export(document); } public Byte[] NcAccidentBookMerge( Byte[] input, CreateOrEditNcDocumentInput ncDocument, UserEditDto currentUser, List<NcEntityDto> entities, List<UserEditDto> staff, string IncidentType, List<string> AccidentTags ) { List<string> EntityNames = new List<string>(); foreach (var ncEntity in entities) { var Title = ncEntity.GetData<AttributeDataDto>("Title").Value; var FirstNames = ncEntity.GetData<AttributeDataDto>("FirstNames").Value; var Surname = ncEntity.GetData<AttributeDataDto>("Surname").Value; EntityNames.Add(Title + " " + FirstNames + " " + Surname); } var ResidentNames = string.Join(", ", EntityNames); List<string> UserNames = new List<string>(); foreach (var person in staff) { var FirstNames = person.Name; var Surname = person.Surname; UserNames.Add(FirstNames + " " + Surname); } var StaffNames = string.Join(", ", UserNames); List<string> DatesOfBirth = new List<string>(); foreach (var ncEntity in entities) { var DoB = ncEntity.GetData<AttributeDataDto>("DateOfBirth").Value; DatesOfBirth.Add(DoB); } var DoBs = string.Join(", ", DatesOfBirth); List<string> AccidentTagList = new List<string>(); foreach (var AccidentTag in AccidentTags) { AccidentTagList.Add(AccidentTag); } var AccidentTagNames = string.Join(", ", AccidentTagList); DocxFormatProvider provider = new DocxFormatProvider(); RadFlowDocument document = provider.Import(input); dynamic mergeRecord = new ExpandoObject(); mergeRecord.IncidentSummary = ncDocument.DisplayName ?? ""; mergeRecord.ResidentNames = ResidentNames; mergeRecord.DatesOfBirth = DoBs; mergeRecord.StaffNames = StaffNames; mergeRecord.ReportString = ncDocument.ReportString ?? ""; mergeRecord.IncidentType = IncidentType ?? ""; mergeRecord.AccidentTags = AccidentTagNames; mergeRecord.OccurrenceDateAndTime = ncDocument.OccurrenceDatetime; if (UserNames.Count() > 0) { mergeRecord.FirstPerson = UserNames[0]; } mergeRecord.ReportingUser = currentUser.Name + " " + currentUser.Surname; List<ExpandoObject> mailMergeDataSource = new List<ExpandoObject>(); mailMergeDataSource.Add(mergeRecord); RadFlowDocument mailMergeResult = document.MailMerge(mailMergeDataSource); //use for testing - outputs to root of Web.Host //using (Stream output = new FileStream("CarePlan.docx", FileMode.OpenOrCreate)) //{ // provider.Export(mailMergeResult, output); //} return provider.Export(mailMergeResult); } public Byte[] NcIncidentReportMerge( Byte[] input, CreateNcIncidentReportDocumentInput incident ) { DocxFormatProvider provider = new DocxFormatProvider(); RadFlowDocument document = provider.Import(input); dynamic mergeRecord = new ExpandoObject(); mergeRecord.Id = incident.Id; mergeRecord.IncidentType = incident.IncidentType; mergeRecord.IncidentState = incident.IncidentState; mergeRecord.CreationTime = incident.CreationTime; mergeRecord.CreatorUser = incident.CreatorUser; mergeRecord.OccurrenceDateAndTime = incident.OccurrenceDatetime; mergeRecord.IncidentSummary = incident.IncidentSummary ?? ""; mergeRecord.FirstPersonToIdentifyTheIncidentUser = incident.FirstPersonToIdentifyTheIncidentUser; mergeRecord.ReporterUser = incident.ReporterUser; mergeRecord.ManagerNotified = incident.ManagerNotified; mergeRecord.ReportedToManagerUser = incident.ReportedToManagerUser ?? ""; mergeRecord.AntecedentNotes = incident.AntecedentNotes; mergeRecord.BehaviourNotes = incident.BehaviourNotes; mergeRecord.ConsequenceNotes = incident.ConsequenceNotes; mergeRecord.PropertyDamage = incident.PropertyDamage ?? "No property damage notes."; mergeRecord.PersonalInjuries = incident.PersonalInjuries ?? "No personal injury notes."; mergeRecord.MedicalNotes = incident.MedicalNotes ?? "No medical notes."; mergeRecord.ExternalAgencyNotes = incident.ExternalAgencyNotes ?? "No external agency notes."; mergeRecord.CarePlanNotes = incident.CarePlanNotes ?? "No care plan notes."; mergeRecord.RIDDORNotes = incident.RIDDORNotes ?? "No RIDDOR notes."; mergeRecord.NextOfKinNotes = incident.NextOfKinNotes ?? "No next of kin notes."; mergeRecord.AdditionalNotes = incident.AdditionalNotes ?? "No additional notes."; if (String.IsNullOrEmpty(string.Join(", ", incident.ResidentNames))) { mergeRecord.ResidentNames = "No residents involved."; } else { mergeRecord.ResidentNames = string.Join(", ", incident.ResidentNames); } if (String.IsNullOrEmpty(string.Join(", ", incident.StaffNames))) { mergeRecord.StaffNames = string.Join(", ", incident.StaffNames); } else { mergeRecord.StaffNames = string.Join(", ", incident.StaffNames); } if (String.IsNullOrEmpty(string.Join(", ", incident.ContactNames))) { mergeRecord.ContactNames = "No third parties involved."; } else { mergeRecord.ContactNames = string.Join(", ", incident.ContactNames); } List<ExpandoObject> mailMergeDataSource = new List<ExpandoObject>(); mailMergeDataSource.Add(mergeRecord); RadFlowDocument mailMergeResult = document.MailMerge(mailMergeDataSource); //RadFlowDocumentEditor editor = new RadFlowDocumentEditor(document); // document is an instance of the RadFlowDocument class //editor.ReplaceText("code", "source code", true, true); //use for testing - outputs to root of Web.Host //using (Stream output = new FileStream("ReportIncident.docx", FileMode.OpenOrCreate)) //{ // provider.Export(mailMergeResult, output); //} return provider.Export(mailMergeResult); } public Byte[] AppendHistory(Byte[] input, List<NcDocumentHistoryDto> documentHistory) { DocxFormatProvider provider = new DocxFormatProvider(); RadFlowDocument document = provider.Import(input); //SetupHistoryStyles(document); CreateSection(document, "Document history", documentHistory); //comment out when live //using (Stream output = new FileStream("LocalTest.docx", FileMode.OpenOrCreate)) //{ // provider.Export(document, output); //} return provider.Export(document); } #region helpers /// <summary> /// For calculating only age /// </summary> /// <param name="dateOfBirth">Date of birth</param> /// <returns> age e.g. 26</returns> private int CalculateAge(DateTime dateOfBirth) { int age = 0; age = DateTime.Now.Year - dateOfBirth.Year; if (DateTime.Now.DayOfYear < dateOfBirth.DayOfYear) age = age - 1; return age; } //private void SetupHistoryStyles(RadFlowDocument document) //{ // var heading1 = document.StyleRepository.AddBuiltInStyle(BuiltInStyleNames.GetHeadingStyleIdByIndex(1)); // var heading2 = document.StyleRepository.AddBuiltInStyle(BuiltInStyleNames.GetHeadingStyleIdByIndex(2)); //} private void SetupCarePlanStyles(RadFlowDocument document) { var heading1 = document.StyleRepository.AddBuiltInStyle(BuiltInStyleNames.GetHeadingStyleIdByIndex(1)); heading1.CharacterProperties.FontFamily.LocalValue = DefaultFontFamily; heading1.CharacterProperties.FontSize.LocalValue = 32.0; heading1.CharacterProperties.FontWeight.LocalValue = System.Windows.FontWeights.Bold; heading1.CharacterProperties.ForegroundColor.LocalValue = DefaultForeground; heading1.ParagraphProperties.PageBreakBefore.LocalValue = true; } private void CreateSection(RadFlowDocument document, string title, List<NcDocumentHistoryDto> documentHistory) { //delete section if exists Section sectionFound = null; var existingParagraph = FindHeaderAsParagraphContainingText(document, title); if (existingParagraph != null) { foreach (var sectionInstance in document.EnumerateChildrenOfType<Section>()) { if (sectionInstance == existingParagraph.BlockContainer) { sectionFound = sectionInstance; break; } } if (sectionFound != null) { document.Sections.Remove(sectionFound); } } RadFlowDocumentEditor editor = new RadFlowDocumentEditor(document); Section section = editor.InsertSection(); section.SectionType = SectionType.Continuous; section.PageSize = PaperTypeConverter.ToSize(PaperTypes.A4); var paragraph = section.Blocks.AddParagraph(); editor.MoveToParagraphStart(paragraph); paragraph.StyleId = BuiltInStyleNames.GetHeadingStyleIdByIndex(1); editor.InsertText(title); InsertTable(section, editor, documentHistory); } private void InsertTable(Section section, RadFlowDocumentEditor editor, List<NcDocumentHistoryDto> documentHistory) { var paragraph = section.Blocks.AddParagraph(); editor.MoveToParagraphStart(paragraph); Table table = section.Blocks.AddTable(); var row = table.Rows.AddTableRow(); var cell = row.Cells.AddTableCell(); cell.PreferredWidth = new TableWidthUnit(TableWidthUnitType.Fixed, 120); SetCellText(editor, cell, "History", bold: true, background: new ThemableColor(Colors.LightSteelBlue), horizontalAlignment: Alignment.Left); //cell = row.Cells.AddTableCell(); //cell.PreferredWidth = new TableWidthUnit(TableWidthUnitType.Fixed, 120); //SetCellText(editor, cell, "User", bold: true, background: new ThemableColor(Colors.LightSteelBlue), horizontalAlignment: Alignment.Left); //cell = row.Cells.AddTableCell(); //cell.PreferredWidth = new TableWidthUnit(TableWidthUnitType.Auto); //SetCellText(editor, cell, "Report string", bold: true, background: new ThemableColor(Colors.LightSteelBlue), horizontalAlignment: Alignment.Left); //cell = row.Cells.AddTableCell(); //cell.PreferredWidth = new TableWidthUnit(TableWidthUnitType.Fixed, 100); //SetCellText(editor, cell, "Filename", bold: true, background: new ThemableColor(Colors.LightSkyBlue), horizontalAlignment: Alignment.Left); foreach (var history in documentHistory) { row = table.Rows.AddTableRow(); //cell = row.Cells.AddTableCell(); //SetCellText(editor, cell, history.CreationTime.ToLocalTime().ToString("dd/MM/yyyy HH:mm"), horizontalAlignment: Alignment.Left, verticalAlignment: VerticalAlignment.Top); //cell = row.Cells.AddTableCell(); //SetCellText(editor, cell, history.CreatorUserName, horizontalAlignment: Alignment.Left, verticalAlignment: VerticalAlignment.Top); cell = row.Cells.AddTableCell(); SetCellText(editor, cell, history.ReportString, horizontalAlignment: Alignment.Left, verticalAlignment: VerticalAlignment.Top); //cell = row.Cells.AddTableCell(); //var test = Path.GetFileName(history.Uri); //SetCellText(editor, cell, Path.GetFileName(history.Uri), horizontalAlignment: Alignment.Left, verticalAlignment: VerticalAlignment.Top); } } private void SetCellText(RadFlowDocumentEditor editor, TableCell cell, string text, string fontFamily = null, double? fontSize = null, bool? bold = null, bool? italic = null, TableCellBorders borders = null, ThemableColor background = null, ThemableColor foreground = null, Alignment? horizontalAlignment = null, VerticalAlignment? verticalAlignment = null) { cell.IgnoreCellMarkerInRowHeightCalculation = true; cell.Padding = new Padding(1); var paragraph = cell.Blocks.AddParagraph(); paragraph.StyleId = BuiltInStyleNames.NormalStyleId; paragraph.Properties.SpacingBefore.LocalValue = 0; paragraph.Properties.SpacingAfter.LocalValue = 0; editor.MoveToParagraphStart(paragraph); if (borders != null) cell.Borders = borders; if (background != null) cell.Shading.BackgroundColor = background; editor.CharacterFormatting.FontFamily.LocalValue = string.IsNullOrEmpty(fontFamily) ? DefaultFontFamily : new ThemableFontFamily(fontFamily); editor.CharacterFormatting.FontSize.LocalValue = fontSize ?? DefaultFontSize; //editor.CharacterFormatting.FontWeight.LocalValue = (bold ?? false) ? FontWeights.Bold : FontWeights.Normal; //editor.CharacterFormatting.FontStyle.LocalValue = (italic ?? false) ? FontStyles.Italic : FontStyles.Normal; editor.CharacterFormatting.ForegroundColor.LocalValue = foreground ?? DefaultForeground; cell.VerticalAlignment = verticalAlignment != null ? verticalAlignment.Value : VerticalAlignment.Center; paragraph.TextAlignment = horizontalAlignment != null ? horizontalAlignment.Value : Alignment.Center; editor.InsertText(string.IsNullOrEmpty(text) ? " " : text); } private Paragraph FindHeaderAsParagraphContainingText(RadFlowDocument document, string searchedText) { foreach (var titleParagraph in document.EnumerateChildrenOfType<Paragraph>().Where(p => p.StyleId.Contains("Heading"))) { StringBuilder paragraphContent = new StringBuilder(); foreach (var run in titleParagraph.EnumerateChildrenOfType<Run>()) { if (run.Text == searchedText) { return titleParagraph; } } } return null; } #endregion }}
Can you tell us what Nuget packages we need to install to make this work?
