using CommunityToolkit.Mvvm.ComponentModel; using ivf_tl_Entity.Entity; using ivf_tl_Entity.Entity.balance; using ivf_tl_Entity.Entity.Result; using ivf_tl_Service.HttpProvider; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using QuestPDF.Fluent; using QuestPDF.Helpers; using QuestPDF.Infrastructure; using System.Windows.Resources; using System.IO; using ivf_tl_Entity.Entity.Mark; using System.Diagnostics; using ivf_tl_Manage.Converts; using System.Collections.ObjectModel; namespace ivf_tl_Manage.ViewModels { public partial class PdfViewModel : BaseViewModel { public byte[] LogoBytes = null; public List PdfImageList { get; set; } = new List(); public DishProvider dishProvider = null; public HouseProvider houseProvider = null; public MarkSettingProvider markSettingProvider = null; public Dish Dish = null; public Document Document { get; set; } = null; public List DishPicAndVideoList { get; set; } = new List(); public List QuickButtons { get; set; } = new List(); public bool IsUpdateAi { get; set; } = false; [ObservableProperty] private bool isCurrentDish = true; List MarkEntityList; int ChildrenMarkCount = 0; string HosName; public PdfViewModel(BaseViewModel parentViewModel, Dish dishValue, bool isc) { base.NavName = KeyToStringConvert.GetLanguageStringByKey("0595"); base.ViewModelName = nameof(PdfViewModel); base.NavList.Clear(); base.NavList.Add(parentViewModel); base.NavList.Add(this); dishProvider = AppData.Instance.GetDishProvider(); houseProvider = AppData.Instance.GetHouseProvider(); markSettingProvider = AppData.Instance.GetMarkSettingProvider(); Dish = dishValue; IsCurrentDish = isc; IsUpdateAi = true; GetLogoBytes(); ChildrenMarkCount = 0; MarkEntityList = markSettingProvider.GetAllMarkEntityApi(0); foreach (var item in MarkEntityList) { ChildrenMarkCount += item.children.Count; } } private void GetLeafParentNodeList(MarkEntity markEntity, List list) { if (markEntity.child != 1) return; if (markEntity.children != null && markEntity.children.Any()) { var a = markEntity.children.FirstOrDefault(x => x.child == 1); if (a == null) { list.Add(markEntity); return; } foreach (var item in markEntity.children) { GetLeafParentNodeList(item, list); } return; } list.Add(markEntity); } private void GetLogoBytes() { var CurrentTlSettingCommon = houseProvider.GetSettingCommonApi(Dish.tlSn); if (CurrentTlSettingCommon == null) return; HosName = CurrentTlSettingCommon.reportHospitalName; if (!string.IsNullOrEmpty(CurrentTlSettingCommon.reportHospitalLogoUrl)) { LogoBytes = dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{CurrentTlSettingCommon.reportHospitalLogoUrl}?token={AppData.Instance.HttpServiceCall.GetToken()}"); } return; HosName = "成都艾伟孚生物科技有限公司"; StreamResourceInfo streamInfo = System.Windows.Application.GetResourceStream(new Uri("pack://application:,,,/ivf_tl_Manage;component/Resources/Images/pdfLogo.png", UriKind.Absolute)); if (streamInfo != null) { using (Stream imageStream = streamInfo.Stream) { using (var memoryStream = new MemoryStream()) { imageStream.CopyTo(memoryStream); LogoBytes = memoryStream.ToArray(); } } } } public void MarkEmbryo() { MarkUseViewModel markUseViewModel = new MarkUseViewModel(this, IsCurrentDish); AppData.Instance.MainWindowViewModel.CurrentViewModle = markUseViewModel; } public Document GenerateReport(ReportMarkData reportData) { float borderLine = 0.25f; float picHeight = 2.54f; float picPadding = 3f; try { IContainer CellStyle(IContainer container) => container.Border(borderLine).AlignCenter().PaddingVertical(5).AlignCenter(); var document = Document.Create(container => { container .Page(page => { page.Size(PageSizes.A4); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15)); page.Header().PaddingHorizontal(0.4f, Unit.Centimetre).Component(new HeaderComponent(LogoBytes)); page.Content().PaddingTop(4.8f, Unit.Centimetre).AlignCenter().Column(col => { col.Item().AlignCenter().Text(text => { text.Span("时差培养箱智能").FontSize(25); text.Span("AI").FontSize(25); }); col.Item().PaddingTop(20).AlignCenter().Text("图像分析报告").FontSize(25); }); }) .Page(page => { page.Size(PageSizes.A4); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15)); page.Header().PaddingHorizontal(0.4f, Unit.Centimetre).Component(new HeaderComponent(LogoBytes)); page.Content().Section("one").PaddingHorizontal(2.4f, Unit.Centimetre).AlignLeft().Column(col => { col.Item().PaddingTop(10).Text(text => { text.Span("患者姓名:"); text.Span($"{reportData.wife}/{reportData.husband}"); }); col.Item().PaddingTop(13).Text(text => { text.Span("出生年龄:"); text.Span(reportData.wifeBirth); }); col.Item().PaddingTop(13).Text(text => { text.Span("受精时间:"); text.Span(reportData.startTime); }); col.Item().PaddingTop(13).Text(text => { text.Span("受精方式:"); text.Span(reportData.fertilizationType); }); col.Item().PaddingTop(13).Text(text => { text.Span("培养时间:"); text.Span($"{reportData.createTime}至{reportData.endTime}"); }); col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); }); table.Header(header => { header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text("胚胎数量"); header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text("移植"); header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text("冷冻"); header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text("作废"); }); table.Cell().AlignMiddle ().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.embryoCount.ToString()); table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.transplant.ToString()); table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.freezing.ToString()); table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.invalid.ToString()); }); int markCount = 0; EmbryoMark itemMark = null; if (reportData.transplantEmbryos != null && reportData.transplantEmbryos.Any() && reportData.transplantEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null) { col.Item().PaddingTop(9).Text("移植胚胎图像"); col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { columns.ConstantColumn(17); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); }); foreach (var item in reportData.transplantEmbryos) { if (item.embryoMark == null) continue; item.embryoMark = item.embryoMark.OrderBy(x => x.developTime).ToList(); markCount = item.embryoMark.Count; if (markCount == 0) continue; table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}"); for (int i = 0; i < 6; i++) { if (i >= markCount) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); continue; } itemMark = item.embryoMark[i]; table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{itemMark.pictureUrl}")); } } }); } if (reportData.freezingEmbryos != null && reportData.freezingEmbryos.Any() && reportData.freezingEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null) { col.Item().PaddingTop(9).Text("冷冻胚胎图像"); col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { columns.ConstantColumn(17); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); }); foreach (var item in reportData.freezingEmbryos) { if (item.embryoMark == null) continue; item.embryoMark = item.embryoMark.OrderBy(x => x.developTime).ToList(); markCount = item.embryoMark.Count; if (markCount == 0) continue; table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}"); for (int i = 0; i < 6; i++) { if (i >= markCount) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); continue; } itemMark = item.embryoMark[i]; table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{itemMark.pictureUrl}")); } } }); } }); page.Footer().AlignCenter().Text("第1页").FontSize(9); }) .Page(page => { page.Size(PageSizes.A4.Landscape()); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(8)); //.PaddingHorizontal(2, Unit.Centimetre).PaddingVertical(1.5f, Unit.Centimetre) page.Header().PaddingHorizontal(0.4f, Unit.Centimetre).Component(new HeaderComponent(LogoBytes)); var dataList = reportData.transplantEmbryos.Union(reportData.freezingEmbryos); float wi = 25f; page.Content().PaddingHorizontal(0.4f, Unit.Centimetre).AlignLeft().Column(col => { col.Item().PaddingTop(10).Text("标注信息").FontSize(15); col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); //2细胞 columns.RelativeColumn(); //columns.ConstantColumn(wi); columns.RelativeColumn(); columns.RelativeColumn(); //4细胞 columns.RelativeColumn(); //columns.ConstantColumn(wi); columns.RelativeColumn(); columns.RelativeColumn(); //8细胞 columns.RelativeColumn(); //columns.ConstantColumn(wi); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); }); table.ExtendLastCellsToTableBottom(); table.Cell().Row(1).Column(1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine("孔位"); table.Cell().Row(1).Column(2).ColumnSpan(4).Element(CellStyle).Text("原核"); table.Cell().Row(1).Column(6).ColumnSpan(3).Element(CellStyle).Text("2细胞"); table.Cell().Row(1).Column(9).ColumnSpan(3).Element(CellStyle).Text("4细胞"); table.Cell().Row(1).Column(12).ColumnSpan(3).Element(CellStyle).Text("8细胞"); table.Cell().Row(1).Column(15).ColumnSpan(2).Element(CellStyle).Text("融合期"); table.Cell().Row(1).Column(17).ColumnSpan(4).Element(CellStyle).Text("囊胚"); table.Cell().Row(1).Column(21).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine("分数"); table.Cell().Row(1).Column(22).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine("去向"); table.Cell().Row(2).Column(2).Element(CellStyle).TextLine("时间"); table.Cell().Row(2).Column(3).Element(CellStyle).TextLine("原核数量"); table.Cell().Row(2).Column(4).Element(CellStyle).TextLine("核仁数量"); table.Cell().Row(2).Column(5).Element(CellStyle).TextLine("Z分级"); table.Cell().Row(2).Column(6).Element(CellStyle).TextLine("时间"); table.Cell().Row(2).Column(7).Element(CellStyle).TextLine("碎片比例"); table.Cell().Row(2).Column(8).Element(CellStyle).TextLine("均匀度"); table.Cell().Row(2).Column(9).Element(CellStyle).TextLine("时间"); table.Cell().Row(2).Column(10).Element(CellStyle).TextLine("碎片比例"); table.Cell().Row(2).Column(11).Element(CellStyle).TextLine("均匀度"); table.Cell().Row(2).Column(12).Element(CellStyle).TextLine("时间"); table.Cell().Row(2).Column(13).Element(CellStyle).TextLine("碎片比例"); table.Cell().Row(2).Column(14).Element(CellStyle).TextLine("均匀度"); table.Cell().Row(2).Column(15).Element(CellStyle).TextLine("时间"); table.Cell().Row(2).Column(16).Element(CellStyle).TextLine("致密化"); table.Cell().Row(2).Column(17).Element(CellStyle).TextLine("时间"); table.Cell().Row(2).Column(18).Element(CellStyle).TextLine("扩张期"); table.Cell().Row(2).Column(19).Element(CellStyle).TextLine("内细胞"); table.Cell().Row(2).Column(20).Element(CellStyle).TextLine("外滋养层"); uint row = 3; EmbryoMark keyMark = null; EmbryoMark valueMark = null; string stateString = "冷冻"; foreach (var itemEmbryoMark in dataList) { table.Cell().Row(row).Column(1).Element(CellStyle).AlignMiddle().Text($"{itemEmbryoMark.wellSn}"); table.Cell().Row(row).Column(21).Element(CellStyle).Text(itemEmbryoMark.score == -1 ? null : itemEmbryoMark.score.ToString()); if (itemEmbryoMark.state == 2) stateString = "移植"; if (itemEmbryoMark.state == 1) stateString = "冷冻"; table.Cell().Row(row).Column(22).Element(CellStyle).TextLine(stateString); keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "2PN" && x.child == 1); if (keyMark == null) { table.Cell().Row(row).Column(2).Element(CellStyle); table.Cell().Row(row).Column(3).Element(CellStyle); table.Cell().Row(row).Column(4).Element(CellStyle); table.Cell().Row(row).Column(5).Element(CellStyle); } else { table.Cell().Row(row).Column(2).Element(CellStyle).TextTime(keyMark.developTime); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "2PN/PN-NUM" && x.child == 1); table.Cell().Row(row).Column(3).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "nucleolus-NUM" && x.child == 1); table.Cell().Row(row).Column(4).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "Z-Level" && x.child == 1); table.Cell().Row(row).Column(5).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null); } keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "2-cell" && x.child == 1); if (keyMark == null) { table.Cell().Row(row).Column(6).Element(CellStyle); table.Cell().Row(row).Column(7).Element(CellStyle); table.Cell().Row(row).Column(8).Element(CellStyle); } else { table.Cell().Row(row).Column(6).Element(CellStyle).TextTime(keyMark.developTime); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "2-cell/key_fragment" && x.child == 1); table.Cell().Row(row).Column(7).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "2-cell/key_uniform" && x.child == 1); table.Cell().Row(row).Column(8).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null); } keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "4-cell" && x.child == 1); if (keyMark == null) { table.Cell().Row(row).Column(9).Element(CellStyle); table.Cell().Row(row).Column(10).Element(CellStyle); table.Cell().Row(row).Column(11).Element(CellStyle); } else { table.Cell().Row(row).Column(9).Element(CellStyle).TextTime(keyMark.developTime); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "4-cell/key_fragment" && x.child == 1); table.Cell().Row(row).Column(10).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "4-cell/key_uniform" && x.child == 1); table.Cell().Row(row).Column(11).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null); } keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "8-cell" && x.child == 1); if (keyMark == null) { table.Cell().Row(row).Column(12).Element(CellStyle); table.Cell().Row(row).Column(13).Element(CellStyle); table.Cell().Row(row).Column(14).Element(CellStyle); } else { table.Cell().Row(row).Column(12).Element(CellStyle).TextTime(keyMark.developTime); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "8-cell/key_fragment" && x.child == 1); table.Cell().Row(row).Column(13).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "8-cell/key_uniform" && x.child == 1); table.Cell().Row(row).Column(14).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null); } keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "fusion" && x.child == 1); if (keyMark == null) { table.Cell().Row(row).Column(15).Element(CellStyle); table.Cell().Row(row).Column(16).Element(CellStyle); } else { table.Cell().Row(row).Column(15).Element(CellStyle).TextTime(keyMark.developTime); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "Densification" && x.child == 1); table.Cell().Row(row).Column(16).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null); } keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "blastula" && x.child == 1); if (keyMark == null) { table.Cell().Row(row).Column(17).Element(CellStyle); table.Cell().Row(row).Column(18).Element(CellStyle); table.Cell().Row(row).Column(19).Element(CellStyle); table.Cell().Row(row).Column(20).Element(CellStyle); } else { table.Cell().Row(row).Column(17).Element(CellStyle).TextTime(keyMark.developTime); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "blastula/Expansion" && x.child == 1); table.Cell().Row(row).Column(18).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "blastula/ICM" && x.child == 1); table.Cell().Row(row).Column(19).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "blastula/TE" && x.child == 1); table.Cell().Row(row).Column(20).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null); } row++; } }); }); page.Footer().AlignCenter().Text("第2页").FontSize(9); }); }); IsUpdateAi = false; return document; //document.GenerateImages().ToList(); //foreach (var item in aa) //{ // testimage.Source = AppData.Instance.ByteToBitmapImage(item); // break; //} //string ss = ""; //return; //return document.GeneratePdf(filePath); AppData.Instance.MainWindow.Dispatcher.Invoke(() => { ToastMessageShow("AI报告导出成功"); }); } catch (Exception ex) { ExLog(ex, "GenerateReport"); AppData.Instance.MainWindow.Dispatcher.Invoke(() => { MessageBoxShow("导出AI报表错误", $"{ex.Message}"); }); return null; } } /// /// 无动态显示 /// /// /// public Document GenerateReportENold(ReportMarkData reportData) { float borderLine = 0.25f; //float picHeight = 2.54f; float picHeight = 2.65f; float picPadding = 3f; float headerPaddingHorizontal = 1.0f; float pagePaddingHorizontal = 1.0f; float wellWidth = 25f; try { IContainer CellStyle(IContainer container) => container.Border(borderLine).AlignCenter().PaddingVertical(5).AlignCenter(); var document = Document.Create(container => { container .Page(page => { page.Size(PageSizes.A4); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15)); page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentHeader(LogoBytes, HosName)); page.Content().PaddingTop(4.8f, Unit.Centimetre).AlignCenter().Column(col => { col.Item().AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0567")).FontSize(25); col.Item().PaddingTop(20).AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0594")).FontSize(25); }); }) .Page(page => { page.Size(PageSizes.A4); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15)); page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}/{reportData.husband}", Dish.caseId, HosName)); page.Content().PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col => { col.Item().PaddingTop(10).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0031")); text.Span($":{reportData.wife}/{reportData.husband}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0151")); text.Span($":{Dish.caseId}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0261")); text.Span($":{Dish.cycle}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0032")); text.Span($":{reportData.startTime}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0157")); text.Span($":{reportData.fertilizationType}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0568")); text.Span($":{reportData.createTime} {KeyToStringConvert.GetLanguageStringByKey("0569")} {reportData.endTime}"); }); col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { //columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); }); table.Header(header => { //header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0612")); header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0041")); header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0040")); header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0042")); }); //table.Cell().AlignMiddle().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.embryoCount.ToString()); table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.transplant.ToString()); table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.freezing.ToString()); table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.invalid.ToString()); }); }); //page.Footer().AlignCenter().Text("第1页").FontSize(9); page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 1 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9); }) .Page(page => { page.Size(PageSizes.A4); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15)); page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}/{reportData.husband}", Dish.caseId, HosName)); page.Content().PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col => { int markCount = 0; float tableHeaderFontSize = 9f; //EmbryoMark itemMark = null; EmbryoMark markKeyPic = null; if (reportData.transplantEmbryos != null && reportData.transplantEmbryos.Any() && reportData.transplantEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null) { //col.Item().PaddingTop(9).Text("移植胚胎图像 (前2名)"); col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0610")); col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { columns.ConstantColumn(wellWidth); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); }); table.Header(header => { header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0586")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0587")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0588")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0589")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0590")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0591")).FontSize(tableHeaderFontSize); }); foreach (var item in reportData.transplantEmbryos) { if (item.embryoMark == null) continue; //item.embryoMark = item.embryoMark.OrderBy(x => x.developTime).ToList(); markCount = item.embryoMark.Count; if (markCount == 0) continue; table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}"); markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2PN"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2-cell"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "4-cell"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "8-cell"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "fusion"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "blastula"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } //for (int i = 0; i < 6; i++) //{ // if (i >= markCount) // { // table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); // continue; // } // itemMark = item.embryoMark[i]; // Debug.WriteLine(itemMark.markKey); // table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{itemMark.pictureUrl}")); //} } }); } if (reportData.freezingEmbryos != null && reportData.freezingEmbryos.Any() && reportData.freezingEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null) { //col.Item().PaddingTop(9).Text("冷冻胚胎图像 (前5名)"); col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0611")); col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { columns.ConstantColumn(wellWidth); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); }); table.Header(header => { header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0586")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0587")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0588")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0589")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0590")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0591")).FontSize(tableHeaderFontSize); }); foreach (var item in reportData.freezingEmbryos) { if (item.embryoMark == null) continue; item.embryoMark = item.embryoMark.OrderBy(x => x.developTime).ToList(); markCount = item.embryoMark.Count; if (markCount == 0) continue; table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}"); markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2PN"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2-cell"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "4-cell"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "8-cell"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "fusion"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "blastula"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } //for (int i = 0; i < 6; i++) //{ // if (i >= markCount) // { // table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); // continue; // } // itemMark = item.embryoMark[i]; // table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{itemMark.pictureUrl}")); //} } }); } }); //page.Footer().AlignCenter().Text("第2页").FontSize(9); page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 2 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9); }) .Page(page => { page.Size(PageSizes.A4.Landscape()); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(8)); //.PaddingHorizontal(2, Unit.Centimetre).PaddingVertical(1.5f, Unit.Centimetre) page.Header().PaddingHorizontal(0.4f, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}/{reportData.husband}", Dish.caseId, HosName)); var dataList = reportData.transplantEmbryos.Union(reportData.freezingEmbryos); float wi = 25f; page.Content().PaddingHorizontal(0.4f, Unit.Centimetre).AlignLeft().Column(col => { col.Item().PaddingTop(10).Text(KeyToStringConvert.GetLanguageStringByKey("0570")).FontSize(15); col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); //2细胞 columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); //4细胞 columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); //8细胞 columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); }); table.ExtendLastCellsToTableBottom(); table.Cell().Row(1).Column(1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0527")); table.Cell().Row(1).Column(2).ColumnSpan(4).Element(CellStyle).Text(KeyToStringConvert.GetLanguageStringByKey("0586")); table.Cell().Row(1).Column(6).ColumnSpan(3).Element(CellStyle).Text(KeyToStringConvert.GetLanguageStringByKey("0587")); table.Cell().Row(1).Column(9).ColumnSpan(3).Element(CellStyle).Text(KeyToStringConvert.GetLanguageStringByKey("0588")); table.Cell().Row(1).Column(12).ColumnSpan(3).Element(CellStyle).Text(KeyToStringConvert.GetLanguageStringByKey("0589")); table.Cell().Row(1).Column(15).ColumnSpan(2).Element(CellStyle).Text(KeyToStringConvert.GetLanguageStringByKey("0590")); table.Cell().Row(1).Column(17).ColumnSpan(4).Element(CellStyle).Text(KeyToStringConvert.GetLanguageStringByKey("0591")); table.Cell().Row(1).Column(21).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0596")); table.Cell().Row(1).Column(22).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0597")); table.Cell().Row(2).Column(2).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0598")); table.Cell().Row(2).Column(3).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0599")); table.Cell().Row(2).Column(4).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0600")); table.Cell().Row(2).Column(5).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0601")); table.Cell().Row(2).Column(6).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0598")); table.Cell().Row(2).Column(7).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0602")); table.Cell().Row(2).Column(8).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0603")); table.Cell().Row(2).Column(9).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0598")); table.Cell().Row(2).Column(10).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0602")); table.Cell().Row(2).Column(11).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0603")); table.Cell().Row(2).Column(12).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0598")); table.Cell().Row(2).Column(13).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0598")); table.Cell().Row(2).Column(14).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0603")); table.Cell().Row(2).Column(15).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0598")); table.Cell().Row(2).Column(16).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0604")); table.Cell().Row(2).Column(17).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0598")); table.Cell().Row(2).Column(18).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0605")); table.Cell().Row(2).Column(19).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0606")); table.Cell().Row(2).Column(20).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0607")); uint row = 3; EmbryoMark keyMark = null; EmbryoMark valueMark = null; string stateString = "冷冻"; foreach (var itemEmbryoMark in dataList) { table.Cell().Row(row).Column(1).Element(CellStyle).AlignMiddle().Text($"{itemEmbryoMark.wellSn}"); table.Cell().Row(row).Column(21).Element(CellStyle).Text(itemEmbryoMark.score == -1 ? null : itemEmbryoMark.score.ToString()); if (itemEmbryoMark.state == 2) stateString = KeyToStringConvert.GetLanguageStringByKey("0041"); if (itemEmbryoMark.state == 1) stateString = KeyToStringConvert.GetLanguageStringByKey("0040"); table.Cell().Row(row).Column(22).Element(CellStyle).TextLine(stateString); keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "2PN" && x.child == 1); if (keyMark == null) { table.Cell().Row(row).Column(2).Element(CellStyle); table.Cell().Row(row).Column(3).Element(CellStyle); table.Cell().Row(row).Column(4).Element(CellStyle); table.Cell().Row(row).Column(5).Element(CellStyle); } else { table.Cell().Row(row).Column(2).Element(CellStyle).TextTime(keyMark.developTime); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "2PN/PN-NUM" && x.child == 1); table.Cell().Row(row).Column(3).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "nucleolus-NUM" && x.child == 1); table.Cell().Row(row).Column(4).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "Z-Level" && x.child == 1); table.Cell().Row(row).Column(5).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null); } keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "2-cell" && x.child == 1); if (keyMark == null) { table.Cell().Row(row).Column(6).Element(CellStyle); table.Cell().Row(row).Column(7).Element(CellStyle); table.Cell().Row(row).Column(8).Element(CellStyle); } else { table.Cell().Row(row).Column(6).Element(CellStyle).TextTime(keyMark.developTime); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "2-cell/key_fragment" && x.child == 1); table.Cell().Row(row).Column(7).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "2-cell/key_uniform" && x.child == 1); table.Cell().Row(row).Column(8).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null); } keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "4-cell" && x.child == 1); if (keyMark == null) { table.Cell().Row(row).Column(9).Element(CellStyle); table.Cell().Row(row).Column(10).Element(CellStyle); table.Cell().Row(row).Column(11).Element(CellStyle); } else { table.Cell().Row(row).Column(9).Element(CellStyle).TextTime(keyMark.developTime); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "4-cell/key_fragment" && x.child == 1); table.Cell().Row(row).Column(10).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "4-cell/key_uniform" && x.child == 1); table.Cell().Row(row).Column(11).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null); } keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "8-cell" && x.child == 1); if (keyMark == null) { table.Cell().Row(row).Column(12).Element(CellStyle); table.Cell().Row(row).Column(13).Element(CellStyle); table.Cell().Row(row).Column(14).Element(CellStyle); } else { table.Cell().Row(row).Column(12).Element(CellStyle).TextTime(keyMark.developTime); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "8-cell/key_fragment" && x.child == 1); table.Cell().Row(row).Column(13).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "8-cell/key_uniform" && x.child == 1); table.Cell().Row(row).Column(14).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null); } keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "fusion" && x.child == 1); if (keyMark == null) { table.Cell().Row(row).Column(15).Element(CellStyle); table.Cell().Row(row).Column(16).Element(CellStyle); } else { table.Cell().Row(row).Column(15).Element(CellStyle).TextTime(keyMark.developTime); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "Densification" && x.child == 1); table.Cell().Row(row).Column(16).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null); } keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "blastula" && x.child == 1); if (keyMark == null) { table.Cell().Row(row).Column(17).Element(CellStyle); table.Cell().Row(row).Column(18).Element(CellStyle); table.Cell().Row(row).Column(19).Element(CellStyle); table.Cell().Row(row).Column(20).Element(CellStyle); } else { table.Cell().Row(row).Column(17).Element(CellStyle).TextTime(keyMark.developTime); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "blastula/Expansion" && x.child == 1); table.Cell().Row(row).Column(18).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "blastula/ICM" && x.child == 1); table.Cell().Row(row).Column(19).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null); valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "blastula/TE" && x.child == 1); table.Cell().Row(row).Column(20).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null); } row++; } }); }); //page.Footer().AlignCenter().Text("第3页").FontSize(9); page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 3 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9); }); }); IsUpdateAi = false; return document; } catch (Exception ex) { ExLog(ex, "GenerateReport"); AppData.Instance.MainWindow.Dispatcher.Invoke(() => { //MessageBoxShow("导出AI报表错误", $"{ex.Message}"); MessageBoxShow(KeyToStringConvert.GetLanguageStringByKey("0613"), $"{ex.Message}"); }); return null; } } /// /// 标记动态显示 /// /// /// public Document GenerateReportENold1(ReportMarkData reportData) { float borderLine = 0.25f; //float picHeight = 2.54f; float picHeight = 2.65f; float picPadding = 3f; float headerPaddingHorizontal = 1.0f; float pagePaddingHorizontal = 1.0f; float wellWidth = 25f; try { IContainer CellStyle(IContainer container) => container.Border(borderLine).AlignCenter().PaddingVertical(5).AlignCenter(); var document = Document.Create(container => { container .Page(page => { page.Size(PageSizes.A4); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15)); page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentHeader(LogoBytes, HosName)); page.Content().PaddingTop(4.8f, Unit.Centimetre).AlignCenter().Column(col => { col.Item().AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0567")).FontSize(25); col.Item().PaddingTop(20).AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0594")).FontSize(25); }); }) .Page(page => { page.Size(PageSizes.A4); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15)); page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName)); page.Content().PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col => { col.Item().PaddingTop(10).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0031")); text.Span($":{reportData.wife}/{reportData.husband}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0151")); text.Span($":{Dish.caseId}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0261")); text.Span($":{Dish.cycle}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0032")); text.Span($":{reportData.startTime}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0157")); text.Span($":{reportData.fertilizationType}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0568")); text.Span($":{reportData.createTime} {KeyToStringConvert.GetLanguageStringByKey("0569")} {reportData.endTime}"); }); col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { //columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); }); table.Header(header => { //header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0612")); header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0041")); header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0040")); header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0042")); }); //table.Cell().AlignMiddle().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.embryoCount.ToString()); table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.transplant.ToString()); table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.freezing.ToString()); table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.invalid.ToString()); }); }); //page.Footer().AlignCenter().Text("第1页").FontSize(9); page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 1 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9); }) .Page(page => { page.Size(PageSizes.A4); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15)); page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName)); page.Content().PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col => { int markCount = 0; float tableHeaderFontSize = 9f; //EmbryoMark itemMark = null; EmbryoMark markKeyPic = null; if (reportData.transplantEmbryos != null && reportData.transplantEmbryos.Any() && reportData.transplantEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null) { //col.Item().PaddingTop(9).Text("移植胚胎图像 (前2名)"); col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0610")); col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { columns.ConstantColumn(wellWidth); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); }); table.Header(header => { header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0586")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0587")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0588")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0589")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0590")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0591")).FontSize(tableHeaderFontSize); }); foreach (var item in reportData.transplantEmbryos) { if (item.embryoMark == null) continue; //item.embryoMark = item.embryoMark.OrderBy(x => x.developTime).ToList(); markCount = item.embryoMark.Count; if (markCount == 0) continue; table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}"); markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2PN"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2-cell"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "4-cell"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "8-cell"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "fusion"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "blastula"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } } }); } if (reportData.freezingEmbryos != null && reportData.freezingEmbryos.Any() && reportData.freezingEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null) { //col.Item().PaddingTop(9).Text("冷冻胚胎图像 (前5名)"); col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0611")); col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { columns.ConstantColumn(wellWidth); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); }); table.Header(header => { header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0586")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0587")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0588")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0589")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0590")).FontSize(tableHeaderFontSize); header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0591")).FontSize(tableHeaderFontSize); }); foreach (var item in reportData.freezingEmbryos) { if (item.embryoMark == null) continue; item.embryoMark = item.embryoMark.OrderBy(x => x.developTime).ToList(); markCount = item.embryoMark.Count; if (markCount == 0) continue; table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}"); markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2PN"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2-cell"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "4-cell"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "8-cell"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "fusion"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "blastula"); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } //for (int i = 0; i < 6; i++) //{ // if (i >= markCount) // { // table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); // continue; // } // itemMark = item.embryoMark[i]; // table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{itemMark.pictureUrl}")); //} } }); } }); //page.Footer().AlignCenter().Text("第2页").FontSize(9); page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 2 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9); }) .Page(page => { page.Size(PageSizes.A4.Landscape()); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(8)); //.PaddingHorizontal(2, Unit.Centimetre).PaddingVertical(1.5f, Unit.Centimetre) page.Header().PaddingHorizontal(0.4f, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName)); var dataList = reportData.transplantEmbryos.Union(reportData.freezingEmbryos); float wi = 25f; int columnCount = 0; page.Content().PaddingHorizontal(0.4f, Unit.Centimetre).AlignLeft().Column(col => { col.Item().PaddingTop(10).Text(KeyToStringConvert.GetLanguageStringByKey("0570")).FontSize(15); col.Item().PaddingTop(9).Table(table => { //columns.ConstantColumn(wi); table.ColumnsDefinition(columns => { columnCount = 3 + ChildrenMarkCount + MarkEntityList.Count; for (int i = 0; i < columnCount; i++) { columns.RelativeColumn(); } }); table.ExtendLastCellsToTableBottom(); table.Cell().Row(1).Column(1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0527")); uint headerNum1 = 2; uint headerNum2 = 2; foreach (var item in MarkEntityList) { table.Cell().Row(1).Column(headerNum1).ColumnSpan((uint)(item.children.Count + 1)).Element(CellStyle).AlignMiddle().TextLine(item.name); headerNum1 += (uint)(item.children.Count + 1); table.Cell().Row(2).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0598")); foreach (var childrenItem in item.children) { table.Cell().Row(2).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextLine(childrenItem.name); } } table.Cell().Row(1).Column(headerNum1++).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0596")); table.Cell().Row(1).Column(headerNum1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0597")); uint row = 3; EmbryoMark keyMark = null; EmbryoMark valueMark = null; string stateString = "冷冻"; foreach (var itemEmbryoMark in dataList) { table.Cell().Row(row).Column(1).Element(CellStyle).AlignMiddle().Text($"{itemEmbryoMark.wellSn}"); table.Cell().Row(row).Column(headerNum1 - 1).Element(CellStyle).AlignMiddle().Text(itemEmbryoMark.score == -1 ? null : itemEmbryoMark.score.ToString()); if (itemEmbryoMark.state == 2) stateString = KeyToStringConvert.GetLanguageStringByKey("0041"); if (itemEmbryoMark.state == 1) stateString = KeyToStringConvert.GetLanguageStringByKey("0040"); table.Cell().Row(row).Column(headerNum1).Element(CellStyle).AlignMiddle().TextLine(stateString); headerNum2 = 2; foreach (var headerMark in MarkEntityList) { keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == headerMark.markKey && x.child == 1); if (keyMark == null) { columnCount = headerMark.children.Count + 1; for (int i = 0; i < columnCount; i++) { table.Cell().Row(row).Column(headerNum2++).Element(CellStyle); } } else { table.Cell().Row(row).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextTime(keyMark.developTime); foreach (var childrenMarl in headerMark.children) { valueMark = keyMark.children.FirstOrDefault(x => x.markKey == childrenMarl.markKey && x.child == 1); table.Cell().Row(row).Column(headerNum2++).Element(CellStyle).AlignMiddle().Text(valueMark != null ? valueMark.children[0].markName : null); } } } row++; } }); }); page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 3 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9); }); }); IsUpdateAi = false; return document; } catch (Exception ex) { ExLog(ex, "GenerateReport"); AppData.Instance.MainWindow.Dispatcher.Invoke(() => { //MessageBoxShow("导出AI报表错误", $"{ex.Message}"); MessageBoxShow(KeyToStringConvert.GetLanguageStringByKey("0613"), $"{ex.Message}"); }); return null; } } /// /// 图像和标记都动态显示 /// /// /// public Document GenerateReportENOld2(ReportMarkData reportData) { float borderLine = 0.25f; //float picHeight = 2.54f; float picHeight = 2.65f; float picPadding = 3f; float headerPaddingHorizontal = 1.0f; float pagePaddingHorizontal = 1.0f; float wellWidth = 25f; try { IContainer CellStyle(IContainer container) => container.Border(borderLine).AlignCenter().PaddingVertical(5).AlignCenter(); var document = Document.Create(container => { container .Page(page => { page.Size(PageSizes.A4); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15)); page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentHeader(LogoBytes, HosName)); page.Content().PaddingTop(4.8f, Unit.Centimetre).AlignCenter().Column(col => { col.Item().AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0567")).FontSize(25); col.Item().PaddingTop(20).AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0594")).FontSize(25); }); }) .Page(page => { page.Size(PageSizes.A4); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15)); page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName)); page.Content().PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col => { col.Item().PaddingTop(10).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0031")); text.Span($":{reportData.wife}/{reportData.husband}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0151")); text.Span($":{Dish.caseId}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0261")); text.Span($":{Dish.cycle}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0032")); text.Span($":{reportData.startTime}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0157")); text.Span($":{reportData.fertilizationType}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0568")); text.Span($":{reportData.createTime} {KeyToStringConvert.GetLanguageStringByKey("0569")} {reportData.endTime}"); }); col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { //columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); }); table.Header(header => { //header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0612")); header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0041")); header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0040")); header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0042")); }); //table.Cell().AlignMiddle().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.embryoCount.ToString()); table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.transplant.ToString()); table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.freezing.ToString()); table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.invalid.ToString()); }); }); //page.Footer().AlignCenter().Text("第1页").FontSize(9); page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 1 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9); }) .Page(page => { page.Size(PageSizes.A4); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15)); page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName)); page.Content().MinHeight(500f).PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col => { bool haveContent = false; int markCount = 0; float tableHeaderFontSize = 9f; List headerMarkList = new List(); //EmbryoMark itemMark = null; EmbryoMark markKeyPic = null; MarkEntity orderMark = null; if (reportData.transplantEmbryos != null && reportData.transplantEmbryos.Any() && reportData.transplantEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null) { haveContent = true; foreach (var item in reportData.transplantEmbryos) { if (item.embryoMark == null) continue; foreach (var markItem in item.embryoMark) { if (headerMarkList.FirstOrDefault(x => x.markKey == markItem.markKey) == null) { orderMark = MarkEntityList.FirstOrDefault(x => x.markKey == markItem.markKey); headerMarkList.Add(new EmbryoMark { markName = markItem.markName, markKey = markItem.markKey, orderNum = orderMark != null ? orderMark.orderNum : 0 }); } } } //col.Item().PaddingTop(9).Text("移植胚胎图像 (前2名)"); col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0610")); headerMarkList = headerMarkList.OrderBy(x => x.orderNum).ToList(); markCount = headerMarkList.Count; col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { columns.ConstantColumn(wellWidth); for (int i = 0; i < markCount; i++) { columns.RelativeColumn(); } }); table.Header(header => { header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize); foreach (var item in headerMarkList) { header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(item.markName).FontSize(tableHeaderFontSize); } }); foreach (var item in reportData.transplantEmbryos) { if (item.embryoMark == null || !item.embryoMark.Any()) continue; table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}"); foreach (var headerMark in headerMarkList) { markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == headerMark.markKey); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } } } }); } if (reportData.freezingEmbryos != null && reportData.freezingEmbryos.Any() && reportData.freezingEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null) { haveContent = true; headerMarkList.Clear(); foreach (var item in reportData.freezingEmbryos) { if (item.embryoMark == null) continue; foreach (var markItem in item.embryoMark) { if (headerMarkList.FirstOrDefault(x => x.markKey == markItem.markKey) == null) { orderMark = MarkEntityList.FirstOrDefault(x => x.markKey == markItem.markKey); headerMarkList.Add(new EmbryoMark { markName = markItem.markName, markKey = markItem.markKey, orderNum = orderMark != null ? orderMark.orderNum : 0 }); } } } //col.Item().PaddingTop(9).Text("冷冻胚胎图像 (前5名)"); col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0611")); headerMarkList = headerMarkList.OrderBy(x => x.orderNum).ToList(); markCount = headerMarkList.Count; col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { columns.ConstantColumn(wellWidth); for (int i = 0; i < markCount; i++) { columns.RelativeColumn(); } }); table.Header(header => { header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize); foreach (var item in headerMarkList) { header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(item.markName).FontSize(tableHeaderFontSize); } }); foreach (var item in reportData.freezingEmbryos) { if (item.embryoMark == null || !item.embryoMark.Any()) continue; table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}"); foreach (var headerMark in headerMarkList) { markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == headerMark.markKey); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } } } }); } if (!haveContent) col.Item().Text(""); }); //page.Footer().AlignCenter().Text("第2页").FontSize(9); page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 2 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9); }) .Page(page => { page.Size(PageSizes.A4.Landscape()); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(8)); //.PaddingHorizontal(2, Unit.Centimetre).PaddingVertical(1.5f, Unit.Centimetre) page.Header().PaddingHorizontal(0.4f, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName)); var dataList = reportData.transplantEmbryos.Union(reportData.freezingEmbryos); float wi = 25f; int columnCount = 0; page.Content().PaddingHorizontal(0.4f, Unit.Centimetre).AlignLeft().Column(col => { col.Item().PaddingTop(10).Text(KeyToStringConvert.GetLanguageStringByKey("0570")).FontSize(15); col.Item().PaddingTop(9).Table(table => { //columns.ConstantColumn(wi); table.ColumnsDefinition(columns => { columnCount = 3 + ChildrenMarkCount + MarkEntityList.Count; for (int i = 0; i < columnCount; i++) { columns.RelativeColumn(); } }); table.ExtendLastCellsToTableBottom(); table.Cell().Row(1).Column(1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0527")); uint headerNum1 = 2; uint headerNum2 = 2; foreach (var item in MarkEntityList) { table.Cell().Row(1).Column(headerNum1).ColumnSpan((uint)(item.children.Count + 1)).Element(CellStyle).AlignMiddle().TextLine(item.name); headerNum1 += (uint)(item.children.Count + 1); table.Cell().Row(2).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0598")); foreach (var childrenItem in item.children) { table.Cell().Row(2).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextLine(childrenItem.name); } } table.Cell().Row(1).Column(headerNum1++).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0596")); table.Cell().Row(1).Column(headerNum1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0597")); uint row = 3; EmbryoMark keyMark = null; EmbryoMark valueMark = null; string stateString = "冷冻"; foreach (var itemEmbryoMark in dataList) { table.Cell().Row(row).Column(1).Element(CellStyle).AlignMiddle().Text($"{itemEmbryoMark.wellSn}"); table.Cell().Row(row).Column(headerNum1 - 1).Element(CellStyle).AlignMiddle().Text(itemEmbryoMark.score == -1 ? null : itemEmbryoMark.score.ToString()); if (itemEmbryoMark.state == 2) stateString = KeyToStringConvert.GetLanguageStringByKey("0041"); if (itemEmbryoMark.state == 1) stateString = KeyToStringConvert.GetLanguageStringByKey("0040"); table.Cell().Row(row).Column(headerNum1).Element(CellStyle).AlignMiddle().TextLine(stateString); headerNum2 = 2; foreach (var headerMark in MarkEntityList) { keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == headerMark.markKey && x.child == 1); if (keyMark == null) { columnCount = headerMark.children.Count + 1; for (int i = 0; i < columnCount; i++) { table.Cell().Row(row).Column(headerNum2++).Element(CellStyle); } } else { table.Cell().Row(row).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextTime(keyMark.developTime); foreach (var childrenMarl in headerMark.children) { valueMark = keyMark.children.FirstOrDefault(x => x.markKey == childrenMarl.markKey && x.child == 1); table.Cell().Row(row).Column(headerNum2++).Element(CellStyle).AlignMiddle().Text(valueMark != null ? valueMark.children[0].markName : null); } } } row++; } }); }); page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 3 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9); }); }); IsUpdateAi = false; return document; } catch (Exception ex) { ExLog(ex, "GenerateReport"); AppData.Instance.MainWindow.Dispatcher.Invoke(() => { //MessageBoxShow("导出AI报表错误", $"{ex.Message}"); MessageBoxShow(KeyToStringConvert.GetLanguageStringByKey("0613"), $"{ex.Message}"); }); return null; } } /// /// 调整页边距,图片页面最多8个 /// /// /// public Document GenerateReportEN(ReportMarkData reportData) { float borderLine = 0.25f; //float picHeight = 2.54f; //float picHeight = 2.65f; 7张图片 float picHeight = 2.25f; float picPadding = 3f; //float headerPaddingHorizontal = 1.0f; //float pagePaddingHorizontal = 1.0f; float headerPaddingHorizontal = 0.4f; float pagePaddingHorizontal = 0.4f; float wellWidth = 25f; float picWidth = 2.4f; int picNum = 8; try { IContainer CellStyle(IContainer container) => container.Border(borderLine).AlignCenter().PaddingVertical(5).AlignCenter(); var document = Document.Create(container => { container .Page(page => { page.Size(PageSizes.A4); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15)); page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentHeader(LogoBytes, HosName)); page.Content().PaddingTop(4.8f, Unit.Centimetre).AlignCenter().Column(col => { col.Item().AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0567")).FontSize(25); col.Item().PaddingTop(20).AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0594")).FontSize(25); }); }) .Page(page => { page.Size(PageSizes.A4); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15)); page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName)); page.Content().PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col => { col.Item().PaddingTop(10).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0031")); text.Span($":{reportData.wife}/{reportData.husband}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0151")); text.Span($":{Dish.caseId}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0261")); text.Span($":{Dish.cycle}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0032")); text.Span($":{reportData.startTime}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0157")); text.Span($":{reportData.fertilizationType}"); }); col.Item().PaddingTop(13).Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0568")); text.Span($":{reportData.createTime} {KeyToStringConvert.GetLanguageStringByKey("0569")} {reportData.endTime}"); }); col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { //columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); }); table.Header(header => { //header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0612")); header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0041")); header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0040")); header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0042")); }); //table.Cell().AlignMiddle().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.embryoCount.ToString()); table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.transplant.ToString()); table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.freezing.ToString()); table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.invalid.ToString()); }); }); //page.Footer().AlignCenter().Text("第1页").FontSize(9); page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 1 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9); }) .Page(page => { page.Size(PageSizes.A4); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15)); page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName)); page.Content().MinHeight(500f).PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col => { bool haveContent = false; int markCount = 0; float tableHeaderFontSize = 9f; List headerMarkList = new List(); //EmbryoMark itemMark = null; EmbryoMark markKeyPic = null; MarkEntity orderMark = null; if (reportData.transplantEmbryos != null && reportData.transplantEmbryos.Any() && reportData.transplantEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null) { haveContent = true; foreach (var item in reportData.transplantEmbryos) { if (item.embryoMark == null) continue; foreach (var markItem in item.embryoMark) { if (headerMarkList.FirstOrDefault(x => x.markKey == markItem.markKey) == null) { orderMark = MarkEntityList.FirstOrDefault(x => x.markKey == markItem.markKey); headerMarkList.Add(new EmbryoMark { markName = markItem.markName, markKey = markItem.markKey, orderNum = orderMark != null ? orderMark.orderNum : 0 }); } } } //col.Item().PaddingTop(9).Text("移植胚胎图像 (前2名)"); col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0610")); headerMarkList = headerMarkList.OrderBy(x => x.orderNum).Take(picNum).ToList(); markCount = headerMarkList.Count; col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { columns.ConstantColumn(wellWidth); for (int i = 0; i < markCount; i++) { //columns.RelativeColumn(); columns.ConstantColumn(picWidth, Unit.Centimetre); } }); table.Header(header => { header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize); foreach (var item in headerMarkList) { header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(item.markName).FontSize(tableHeaderFontSize); } }); foreach (var item in reportData.transplantEmbryos) { if (item.embryoMark == null || !item.embryoMark.Any()) continue; table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}"); foreach (var headerMark in headerMarkList) { markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == headerMark.markKey); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } } } }); } if (reportData.freezingEmbryos != null && reportData.freezingEmbryos.Any() && reportData.freezingEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null) { haveContent = true; headerMarkList.Clear(); foreach (var item in reportData.freezingEmbryos) { if (item.embryoMark == null) continue; foreach (var markItem in item.embryoMark) { if (headerMarkList.FirstOrDefault(x => x.markKey == markItem.markKey) == null) { orderMark = MarkEntityList.FirstOrDefault(x => x.markKey == markItem.markKey); headerMarkList.Add(new EmbryoMark { markName = markItem.markName, markKey = markItem.markKey, orderNum = orderMark != null ? orderMark.orderNum : 0 }); } } } //col.Item().PaddingTop(9).Text("冷冻胚胎图像 (前5名)"); col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0611")); headerMarkList = headerMarkList.OrderBy(x => x.orderNum).Take(picNum).ToList(); markCount = headerMarkList.Count; col.Item().PaddingTop(9).Table(table => { table.ColumnsDefinition(columns => { columns.ConstantColumn(wellWidth); for (int i = 0; i < markCount; i++) { //columns.RelativeColumn(); columns.ConstantColumn(picWidth, Unit.Centimetre); } }); table.Header(header => { header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize); foreach (var item in headerMarkList) { header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(item.markName).FontSize(tableHeaderFontSize); } }); foreach (var item in reportData.freezingEmbryos) { if (item.embryoMark == null || !item.embryoMark.Any()) continue; table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}"); foreach (var headerMark in headerMarkList) { markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == headerMark.markKey); if (markKeyPic == null) { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre); } else { table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}")); } } } }); } if (!haveContent) col.Item().Text(""); }); //page.Footer().AlignCenter().Text("第2页").FontSize(9); page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 2 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9); }) .Page(page => { page.Size(PageSizes.A4.Landscape()); //page.MarginHorizontal(2, Unit.Centimetre); page.MarginVertical(1.5f, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(8)); //.PaddingHorizontal(2, Unit.Centimetre).PaddingVertical(1.5f, Unit.Centimetre) page.Header().PaddingHorizontal(0.4f, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName)); var dataList = reportData.transplantEmbryos.Union(reportData.freezingEmbryos); float wi = 25f; int columnCount = 0; page.Content().PaddingHorizontal(0.4f, Unit.Centimetre).AlignLeft().Column(col => { col.Item().PaddingTop(10).Text(KeyToStringConvert.GetLanguageStringByKey("0570")).FontSize(15); col.Item().PaddingTop(9).Table(table => { //columns.ConstantColumn(wi); table.ColumnsDefinition(columns => { columnCount = 3 + ChildrenMarkCount + MarkEntityList.Count; for (int i = 0; i < columnCount; i++) { columns.RelativeColumn(); } }); table.ExtendLastCellsToTableBottom(); table.Cell().Row(1).Column(1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0527")); uint headerNum1 = 2; uint headerNum2 = 2; foreach (var item in MarkEntityList) { table.Cell().Row(1).Column(headerNum1).ColumnSpan((uint)(item.children.Count + 1)).Element(CellStyle).AlignMiddle().TextLine(item.name); headerNum1 += (uint)(item.children.Count + 1); table.Cell().Row(2).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0598")); foreach (var childrenItem in item.children) { table.Cell().Row(2).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextLine(childrenItem.name); } } table.Cell().Row(1).Column(headerNum1++).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0596")); table.Cell().Row(1).Column(headerNum1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0597")); uint row = 3; EmbryoMark keyMark = null; EmbryoMark valueMark = null; string stateString = "冷冻"; foreach (var itemEmbryoMark in dataList) { table.Cell().Row(row).Column(1).Element(CellStyle).AlignMiddle().Text($"{itemEmbryoMark.wellSn}"); table.Cell().Row(row).Column(headerNum1 - 1).Element(CellStyle).AlignMiddle().Text(itemEmbryoMark.score == -1 ? null : itemEmbryoMark.score.ToString()); if (itemEmbryoMark.state == 2) stateString = KeyToStringConvert.GetLanguageStringByKey("0041"); if (itemEmbryoMark.state == 1) stateString = KeyToStringConvert.GetLanguageStringByKey("0040"); table.Cell().Row(row).Column(headerNum1).Element(CellStyle).AlignMiddle().TextLine(stateString); headerNum2 = 2; foreach (var headerMark in MarkEntityList) { keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == headerMark.markKey && x.child == 1); if (keyMark == null) { columnCount = headerMark.children.Count + 1; for (int i = 0; i < columnCount; i++) { table.Cell().Row(row).Column(headerNum2++).Element(CellStyle); } } else { table.Cell().Row(row).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextTime(keyMark.developTime); foreach (var childrenMarl in headerMark.children) { valueMark = keyMark.children.FirstOrDefault(x => x.markKey == childrenMarl.markKey && x.child == 1); table.Cell().Row(row).Column(headerNum2++).Element(CellStyle).AlignMiddle().Text(valueMark != null ? valueMark.children[0].markName : null); } } } row++; } }); }); page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 3 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9); }); }); IsUpdateAi = false; return document; } catch (Exception ex) { ExLog(ex, "GenerateReport"); AppData.Instance.MainWindow.Dispatcher.Invoke(() => { //MessageBoxShow("导出AI报表错误", $"{ex.Message}"); MessageBoxShow(KeyToStringConvert.GetLanguageStringByKey("0613"), $"{ex.Message}"); }); return null; } } } public class HeaderComponent : IComponent { byte[] imageByte = null; public HeaderComponent(byte[] by) { imageByte = by; } public void Compose(IContainer container) { //page.MarginHorizontal(2, Unit.Centimetre); //page.MarginVertical(1.5f, Unit.Centimetre); container.Column(col => { if (imageByte != null) { col.Item().PaddingBottom(1.5f).AlignRight().Height(0.68f, Unit.Centimetre).Image(imageByte); } col.Item().LineHorizontal(0.5f).LineColor(QuestPDF.Helpers.Colors.Black);//.PaddingLeft(0.7f, Unit.Centimetre) col.Item().PaddingTop(1.5f).AlignRight().Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0566")).FontSize(14); text.Span($":{DateTime.Now.ToString("yyyy-MM-dd")}").FontSize(14); }); }); } } public class HeaderComponentHeader : IComponent { byte[] imageByte = null; string hosName; public HeaderComponentHeader(byte[] by, string hosName1) { imageByte = by; this.hosName = hosName1; } public void Compose(IContainer container) { container.Column(col => { if (imageByte != null) { //col.Item().PaddingBottom(1.5f).AlignRight().Height(0.68f, Unit.Centimetre).Image(imageByte); col.Item().Row(row => { row.RelativeItem().AlignCenter().Text(hosName).FontSize(14); row.AutoItem().PaddingBottom(1.5f).AlignRight().Height(0.68f, Unit.Centimetre).Image(imageByte); }); } else { col.Item().AlignCenter().Text(hosName).FontSize(14); } col.Item().LineHorizontal(0.5f).LineColor(QuestPDF.Helpers.Colors.Black);//.PaddingLeft(0.7f, Unit.Centimetre) col.Item().PaddingTop(1.5f).AlignRight().Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0566")).FontSize(14); text.Span($":{DateTime.Now.ToString("yyyy-MM-dd")}").FontSize(14); }); }); } } public class HeaderComponentNew : IComponent { string name; string cycle; byte[] imageByte = null; float NameFontsize = 11f; string hosName; public HeaderComponentNew(byte[] by, string name1, string cycle1, string hosName1) { imageByte = by; name = name1; cycle = cycle1; hosName = hosName1; } public void Compose(IContainer container) { container.Column(col => { if (imageByte != null) { //col.Item().PaddingBottom(1.5f).AlignRight().Height(0.68f, Unit.Centimetre).Image(imageByte); col.Item().Row(row => { row.RelativeItem().AlignCenter().Text(hosName).FontSize(14); row.AutoItem().PaddingBottom(1.5f).AlignRight().Height(0.68f, Unit.Centimetre).Image(imageByte); }); } else { col.Item().AlignCenter().Text(hosName).FontSize(14); } col.Item().LineHorizontal(0.5f).LineColor(QuestPDF.Helpers.Colors.Black);//.PaddingLeft(0.7f, Unit.Centimetre) col.Item().Row(row => { row.AutoItem().AlignLeft().Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0031")).FontSize(NameFontsize); text.Span($":{name}").FontSize(NameFontsize); }); row.RelativeItem().AlignCenter().Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0151")).FontSize(NameFontsize); text.Span($":{cycle}").FontSize(NameFontsize); }); }); col.Item().PaddingTop(1.5f).AlignRight().Text(text => { text.Span(KeyToStringConvert.GetLanguageStringByKey("0566")).FontSize(14); text.Span($":{DateTime.Now.ToString("yyyy-MM-dd")}").FontSize(14); }); }); } } public static class sdf { public static void LoadImage(this IContainer container, byte[] by) { if (by != null) { container.Image(by); by = null; } } public static void TextLine(this IContainer container, string Text) { if (string.IsNullOrEmpty(Text)) { return; } container.Text(Text); return; container.Column(col => { for (int i = 0; i < Text.Count(); i++) { if (i == 0) { col.Item().AlignCenter().Text($"{Text[i]}"); } else { col.Item().AlignCenter().PaddingTop(5).Text($"{Text[i]}"); } } }); } public static void TextTime(this IContainer container, int developTime) { container.Text($"{(developTime / 60).ToString("D2")}h{(developTime % 60).ToString("D2")}m"); return; container.Column(col => { col.Item().AlignCenter().Text($"{(developTime / 60).ToString("D2")}h"); col.Item().AlignCenter().PaddingTop(5).Text($"{(developTime % 60).ToString("D2")}m"); }); } } }