PdfViewModel.cs 159 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365
  1. using CommunityToolkit.Mvvm.ComponentModel;
  2. using ivf_tl_Entity.Entity;
  3. using ivf_tl_Entity.Entity.balance;
  4. using ivf_tl_Entity.Entity.Result;
  5. using ivf_tl_Service.HttpProvider;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using QuestPDF.Fluent;
  12. using QuestPDF.Helpers;
  13. using QuestPDF.Infrastructure;
  14. using System.Windows.Resources;
  15. using System.IO;
  16. using ivf_tl_Entity.Entity.Mark;
  17. using System.Diagnostics;
  18. using ivf_tl_Manage.Converts;
  19. using System.Collections.ObjectModel;
  20. namespace ivf_tl_Manage.ViewModels
  21. {
  22. public partial class PdfViewModel : BaseViewModel
  23. {
  24. public byte[] LogoBytes = null;
  25. public List<byte[]> PdfImageList { get; set; } = new List<byte[]>();
  26. public DishProvider dishProvider = null;
  27. public HouseProvider houseProvider = null;
  28. public MarkSettingProvider markSettingProvider = null;
  29. public Dish Dish = null;
  30. public Document Document { get; set; } = null;
  31. public List<DishPicAndVideo> DishPicAndVideoList { get; set; } = new List<DishPicAndVideo>();
  32. public List<ButtonEntity> QuickButtons { get; set; } = new List<ButtonEntity>();
  33. public bool IsUpdateAi { get; set; } = false;
  34. [ObservableProperty]
  35. private bool isCurrentDish = true;
  36. List<MarkEntity> MarkEntityList;
  37. int ChildrenMarkCount = 0;
  38. string HosName;
  39. public PdfViewModel(BaseViewModel parentViewModel, Dish dishValue, bool isc)
  40. {
  41. base.NavName = KeyToStringConvert.GetLanguageStringByKey("0595");
  42. base.ViewModelName = nameof(PdfViewModel);
  43. base.NavList.Clear();
  44. base.NavList.Add(parentViewModel);
  45. base.NavList.Add(this);
  46. dishProvider = AppData.Instance.GetDishProvider();
  47. houseProvider = AppData.Instance.GetHouseProvider();
  48. markSettingProvider = AppData.Instance.GetMarkSettingProvider();
  49. Dish = dishValue;
  50. IsCurrentDish = isc;
  51. IsUpdateAi = true;
  52. GetLogoBytes();
  53. ChildrenMarkCount = 0;
  54. MarkEntityList = markSettingProvider.GetAllMarkEntityApi(0);
  55. foreach (var item in MarkEntityList)
  56. {
  57. ChildrenMarkCount += item.children.Count;
  58. }
  59. }
  60. private void GetLeafParentNodeList(MarkEntity markEntity, List<MarkEntity> list)
  61. {
  62. if (markEntity.child != 1) return;
  63. if (markEntity.children != null && markEntity.children.Any())
  64. {
  65. var a = markEntity.children.FirstOrDefault(x => x.child == 1);
  66. if (a == null)
  67. {
  68. list.Add(markEntity);
  69. return;
  70. }
  71. foreach (var item in markEntity.children)
  72. {
  73. GetLeafParentNodeList(item, list);
  74. }
  75. return;
  76. }
  77. list.Add(markEntity);
  78. }
  79. private void GetLogoBytes()
  80. {
  81. var CurrentTlSettingCommon = houseProvider.GetSettingCommonApi(Dish.tlSn);
  82. if (CurrentTlSettingCommon == null) return;
  83. HosName = CurrentTlSettingCommon.reportHospitalName;
  84. if (!string.IsNullOrEmpty(CurrentTlSettingCommon.reportHospitalLogoUrl))
  85. {
  86. LogoBytes = dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{CurrentTlSettingCommon.reportHospitalLogoUrl}?token={AppData.Instance.HttpServiceCall.GetToken()}");
  87. }
  88. return;
  89. HosName = "成都艾伟孚生物科技有限公司";
  90. StreamResourceInfo streamInfo = System.Windows.Application.GetResourceStream(new Uri("pack://application:,,,/ivf_tl_Manage;component/Resources/Images/pdfLogo.png", UriKind.Absolute));
  91. if (streamInfo != null)
  92. {
  93. using (Stream imageStream = streamInfo.Stream)
  94. {
  95. using (var memoryStream = new MemoryStream())
  96. {
  97. imageStream.CopyTo(memoryStream);
  98. LogoBytes = memoryStream.ToArray();
  99. }
  100. }
  101. }
  102. }
  103. public void MarkEmbryo()
  104. {
  105. MarkUseViewModel markUseViewModel = new MarkUseViewModel(this, IsCurrentDish);
  106. AppData.Instance.MainWindowViewModel.CurrentViewModle = markUseViewModel;
  107. }
  108. public Document GenerateReport(ReportMarkData reportData)
  109. {
  110. float borderLine = 0.25f;
  111. float picHeight = 2.54f;
  112. float picPadding = 3f;
  113. try
  114. {
  115. IContainer CellStyle(IContainer container) => container.Border(borderLine).AlignCenter().PaddingVertical(5).AlignCenter();
  116. var document = Document.Create(container =>
  117. {
  118. container
  119. .Page(page =>
  120. {
  121. page.Size(PageSizes.A4);
  122. //page.MarginHorizontal(2, Unit.Centimetre);
  123. page.MarginVertical(1.5f, Unit.Centimetre);
  124. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15));
  125. page.Header().PaddingHorizontal(0.4f, Unit.Centimetre).Component(new HeaderComponent(LogoBytes));
  126. page.Content().PaddingTop(4.8f, Unit.Centimetre).AlignCenter().Column(col =>
  127. {
  128. col.Item().AlignCenter().Text(text =>
  129. {
  130. text.Span("时差培养箱智能").FontSize(25);
  131. text.Span("AI").FontSize(25);
  132. });
  133. col.Item().PaddingTop(20).AlignCenter().Text("图像分析报告").FontSize(25);
  134. });
  135. })
  136. .Page(page =>
  137. {
  138. page.Size(PageSizes.A4);
  139. //page.MarginHorizontal(2, Unit.Centimetre);
  140. page.MarginVertical(1.5f, Unit.Centimetre);
  141. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15));
  142. page.Header().PaddingHorizontal(0.4f, Unit.Centimetre).Component(new HeaderComponent(LogoBytes));
  143. page.Content().Section("one").PaddingHorizontal(2.4f, Unit.Centimetre).AlignLeft().Column(col =>
  144. {
  145. col.Item().PaddingTop(10).Text(text =>
  146. {
  147. text.Span("患者姓名:");
  148. text.Span($"{reportData.wife}/{reportData.husband}");
  149. });
  150. col.Item().PaddingTop(13).Text(text =>
  151. {
  152. text.Span("出生年龄:");
  153. text.Span(reportData.wifeBirth);
  154. });
  155. col.Item().PaddingTop(13).Text(text =>
  156. {
  157. text.Span("受精时间:");
  158. text.Span(reportData.startTime);
  159. });
  160. col.Item().PaddingTop(13).Text(text =>
  161. {
  162. text.Span("受精方式:");
  163. text.Span(reportData.fertilizationType);
  164. });
  165. col.Item().PaddingTop(13).Text(text =>
  166. {
  167. text.Span("培养时间:");
  168. text.Span($"{reportData.createTime}至{reportData.endTime}");
  169. });
  170. col.Item().PaddingTop(9).Table(table =>
  171. {
  172. table.ColumnsDefinition(columns =>
  173. {
  174. columns.RelativeColumn();
  175. columns.RelativeColumn();
  176. columns.RelativeColumn();
  177. columns.RelativeColumn();
  178. });
  179. table.Header(header =>
  180. {
  181. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text("胚胎数量");
  182. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text("移植");
  183. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text("冷冻");
  184. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text("作废");
  185. });
  186. table.Cell().AlignMiddle
  187. ().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.embryoCount.ToString());
  188. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.transplant.ToString());
  189. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.freezing.ToString());
  190. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.invalid.ToString());
  191. });
  192. int markCount = 0;
  193. EmbryoMark itemMark = null;
  194. if (reportData.transplantEmbryos != null && reportData.transplantEmbryos.Any() && reportData.transplantEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null)
  195. {
  196. col.Item().PaddingTop(9).Text("移植胚胎图像");
  197. col.Item().PaddingTop(9).Table(table =>
  198. {
  199. table.ColumnsDefinition(columns =>
  200. {
  201. columns.ConstantColumn(17);
  202. columns.RelativeColumn();
  203. columns.RelativeColumn();
  204. columns.RelativeColumn();
  205. columns.RelativeColumn();
  206. columns.RelativeColumn();
  207. columns.RelativeColumn();
  208. });
  209. foreach (var item in reportData.transplantEmbryos)
  210. {
  211. if (item.embryoMark == null) continue;
  212. item.embryoMark = item.embryoMark.OrderBy(x => x.developTime).ToList();
  213. markCount = item.embryoMark.Count;
  214. if (markCount == 0) continue;
  215. table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}");
  216. for (int i = 0; i < 6; i++)
  217. {
  218. if (i >= markCount)
  219. {
  220. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  221. continue;
  222. }
  223. itemMark = item.embryoMark[i];
  224. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{itemMark.pictureUrl}"));
  225. }
  226. }
  227. });
  228. }
  229. if (reportData.freezingEmbryos != null && reportData.freezingEmbryos.Any() && reportData.freezingEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null)
  230. {
  231. col.Item().PaddingTop(9).Text("冷冻胚胎图像");
  232. col.Item().PaddingTop(9).Table(table =>
  233. {
  234. table.ColumnsDefinition(columns =>
  235. {
  236. columns.ConstantColumn(17);
  237. columns.RelativeColumn();
  238. columns.RelativeColumn();
  239. columns.RelativeColumn();
  240. columns.RelativeColumn();
  241. columns.RelativeColumn();
  242. columns.RelativeColumn();
  243. });
  244. foreach (var item in reportData.freezingEmbryos)
  245. {
  246. if (item.embryoMark == null) continue;
  247. item.embryoMark = item.embryoMark.OrderBy(x => x.developTime).ToList();
  248. markCount = item.embryoMark.Count;
  249. if (markCount == 0) continue;
  250. table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}");
  251. for (int i = 0; i < 6; i++)
  252. {
  253. if (i >= markCount)
  254. {
  255. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  256. continue;
  257. }
  258. itemMark = item.embryoMark[i];
  259. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{itemMark.pictureUrl}"));
  260. }
  261. }
  262. });
  263. }
  264. });
  265. page.Footer().AlignCenter().Text("第1页").FontSize(9);
  266. })
  267. .Page(page =>
  268. {
  269. page.Size(PageSizes.A4.Landscape());
  270. //page.MarginHorizontal(2, Unit.Centimetre);
  271. page.MarginVertical(1.5f, Unit.Centimetre);
  272. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(8));
  273. //.PaddingHorizontal(2, Unit.Centimetre).PaddingVertical(1.5f, Unit.Centimetre)
  274. page.Header().PaddingHorizontal(0.4f, Unit.Centimetre).Component(new HeaderComponent(LogoBytes));
  275. var dataList = reportData.transplantEmbryos.Union(reportData.freezingEmbryos);
  276. float wi = 25f;
  277. page.Content().PaddingHorizontal(0.4f, Unit.Centimetre).AlignLeft().Column(col =>
  278. {
  279. col.Item().PaddingTop(10).Text("标注信息").FontSize(15);
  280. col.Item().PaddingTop(9).Table(table =>
  281. {
  282. table.ColumnsDefinition(columns =>
  283. {
  284. columns.RelativeColumn();
  285. columns.RelativeColumn();
  286. columns.RelativeColumn();
  287. columns.RelativeColumn();
  288. columns.RelativeColumn();
  289. //2细胞
  290. columns.RelativeColumn();
  291. //columns.ConstantColumn(wi);
  292. columns.RelativeColumn();
  293. columns.RelativeColumn();
  294. //4细胞
  295. columns.RelativeColumn();
  296. //columns.ConstantColumn(wi);
  297. columns.RelativeColumn();
  298. columns.RelativeColumn();
  299. //8细胞
  300. columns.RelativeColumn();
  301. //columns.ConstantColumn(wi);
  302. columns.RelativeColumn();
  303. columns.RelativeColumn();
  304. columns.RelativeColumn();
  305. columns.RelativeColumn();
  306. columns.RelativeColumn();
  307. columns.RelativeColumn();
  308. columns.RelativeColumn();
  309. columns.RelativeColumn();
  310. columns.RelativeColumn();
  311. columns.RelativeColumn();
  312. });
  313. table.ExtendLastCellsToTableBottom();
  314. table.Cell().Row(1).Column(1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine("孔位");
  315. table.Cell().Row(1).Column(2).ColumnSpan(4).Element(CellStyle).Text("原核");
  316. table.Cell().Row(1).Column(6).ColumnSpan(3).Element(CellStyle).Text("2细胞");
  317. table.Cell().Row(1).Column(9).ColumnSpan(3).Element(CellStyle).Text("4细胞");
  318. table.Cell().Row(1).Column(12).ColumnSpan(3).Element(CellStyle).Text("8细胞");
  319. table.Cell().Row(1).Column(15).ColumnSpan(2).Element(CellStyle).Text("融合期");
  320. table.Cell().Row(1).Column(17).ColumnSpan(4).Element(CellStyle).Text("囊胚");
  321. table.Cell().Row(1).Column(21).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine("分数");
  322. table.Cell().Row(1).Column(22).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine("去向");
  323. table.Cell().Row(2).Column(2).Element(CellStyle).TextLine("时间");
  324. table.Cell().Row(2).Column(3).Element(CellStyle).TextLine("原核数量");
  325. table.Cell().Row(2).Column(4).Element(CellStyle).TextLine("核仁数量");
  326. table.Cell().Row(2).Column(5).Element(CellStyle).TextLine("Z分级");
  327. table.Cell().Row(2).Column(6).Element(CellStyle).TextLine("时间");
  328. table.Cell().Row(2).Column(7).Element(CellStyle).TextLine("碎片比例");
  329. table.Cell().Row(2).Column(8).Element(CellStyle).TextLine("均匀度");
  330. table.Cell().Row(2).Column(9).Element(CellStyle).TextLine("时间");
  331. table.Cell().Row(2).Column(10).Element(CellStyle).TextLine("碎片比例");
  332. table.Cell().Row(2).Column(11).Element(CellStyle).TextLine("均匀度");
  333. table.Cell().Row(2).Column(12).Element(CellStyle).TextLine("时间");
  334. table.Cell().Row(2).Column(13).Element(CellStyle).TextLine("碎片比例");
  335. table.Cell().Row(2).Column(14).Element(CellStyle).TextLine("均匀度");
  336. table.Cell().Row(2).Column(15).Element(CellStyle).TextLine("时间");
  337. table.Cell().Row(2).Column(16).Element(CellStyle).TextLine("致密化");
  338. table.Cell().Row(2).Column(17).Element(CellStyle).TextLine("时间");
  339. table.Cell().Row(2).Column(18).Element(CellStyle).TextLine("扩张期");
  340. table.Cell().Row(2).Column(19).Element(CellStyle).TextLine("内细胞");
  341. table.Cell().Row(2).Column(20).Element(CellStyle).TextLine("外滋养层");
  342. uint row = 3;
  343. EmbryoMark keyMark = null;
  344. EmbryoMark valueMark = null;
  345. string stateString = "冷冻";
  346. foreach (var itemEmbryoMark in dataList)
  347. {
  348. table.Cell().Row(row).Column(1).Element(CellStyle).AlignMiddle().Text($"{itemEmbryoMark.wellSn}");
  349. table.Cell().Row(row).Column(21).Element(CellStyle).Text(itemEmbryoMark.score == -1 ? null : itemEmbryoMark.score.ToString());
  350. if (itemEmbryoMark.state == 2) stateString = "移植";
  351. if (itemEmbryoMark.state == 1) stateString = "冷冻";
  352. table.Cell().Row(row).Column(22).Element(CellStyle).TextLine(stateString);
  353. keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "2PN" && x.child == 1);
  354. if (keyMark == null)
  355. {
  356. table.Cell().Row(row).Column(2).Element(CellStyle);
  357. table.Cell().Row(row).Column(3).Element(CellStyle);
  358. table.Cell().Row(row).Column(4).Element(CellStyle);
  359. table.Cell().Row(row).Column(5).Element(CellStyle);
  360. }
  361. else
  362. {
  363. table.Cell().Row(row).Column(2).Element(CellStyle).TextTime(keyMark.developTime);
  364. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "2PN/PN-NUM" && x.child == 1);
  365. table.Cell().Row(row).Column(3).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null);
  366. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "nucleolus-NUM" && x.child == 1);
  367. table.Cell().Row(row).Column(4).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null);
  368. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "Z-Level" && x.child == 1);
  369. table.Cell().Row(row).Column(5).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null);
  370. }
  371. keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "2-cell" && x.child == 1);
  372. if (keyMark == null)
  373. {
  374. table.Cell().Row(row).Column(6).Element(CellStyle);
  375. table.Cell().Row(row).Column(7).Element(CellStyle);
  376. table.Cell().Row(row).Column(8).Element(CellStyle);
  377. }
  378. else
  379. {
  380. table.Cell().Row(row).Column(6).Element(CellStyle).TextTime(keyMark.developTime);
  381. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "2-cell/key_fragment" && x.child == 1);
  382. table.Cell().Row(row).Column(7).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null);
  383. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "2-cell/key_uniform" && x.child == 1);
  384. table.Cell().Row(row).Column(8).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null);
  385. }
  386. keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "4-cell" && x.child == 1);
  387. if (keyMark == null)
  388. {
  389. table.Cell().Row(row).Column(9).Element(CellStyle);
  390. table.Cell().Row(row).Column(10).Element(CellStyle);
  391. table.Cell().Row(row).Column(11).Element(CellStyle);
  392. }
  393. else
  394. {
  395. table.Cell().Row(row).Column(9).Element(CellStyle).TextTime(keyMark.developTime);
  396. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "4-cell/key_fragment" && x.child == 1);
  397. table.Cell().Row(row).Column(10).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null);
  398. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "4-cell/key_uniform" && x.child == 1);
  399. table.Cell().Row(row).Column(11).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null);
  400. }
  401. keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "8-cell" && x.child == 1);
  402. if (keyMark == null)
  403. {
  404. table.Cell().Row(row).Column(12).Element(CellStyle);
  405. table.Cell().Row(row).Column(13).Element(CellStyle);
  406. table.Cell().Row(row).Column(14).Element(CellStyle);
  407. }
  408. else
  409. {
  410. table.Cell().Row(row).Column(12).Element(CellStyle).TextTime(keyMark.developTime);
  411. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "8-cell/key_fragment" && x.child == 1);
  412. table.Cell().Row(row).Column(13).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null);
  413. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "8-cell/key_uniform" && x.child == 1);
  414. table.Cell().Row(row).Column(14).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null);
  415. }
  416. keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "fusion" && x.child == 1);
  417. if (keyMark == null)
  418. {
  419. table.Cell().Row(row).Column(15).Element(CellStyle);
  420. table.Cell().Row(row).Column(16).Element(CellStyle);
  421. }
  422. else
  423. {
  424. table.Cell().Row(row).Column(15).Element(CellStyle).TextTime(keyMark.developTime);
  425. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "Densification" && x.child == 1);
  426. table.Cell().Row(row).Column(16).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null);
  427. }
  428. keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "blastula" && x.child == 1);
  429. if (keyMark == null)
  430. {
  431. table.Cell().Row(row).Column(17).Element(CellStyle);
  432. table.Cell().Row(row).Column(18).Element(CellStyle);
  433. table.Cell().Row(row).Column(19).Element(CellStyle);
  434. table.Cell().Row(row).Column(20).Element(CellStyle);
  435. }
  436. else
  437. {
  438. table.Cell().Row(row).Column(17).Element(CellStyle).TextTime(keyMark.developTime);
  439. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "blastula/Expansion" && x.child == 1);
  440. table.Cell().Row(row).Column(18).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null);
  441. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "blastula/ICM" && x.child == 1);
  442. table.Cell().Row(row).Column(19).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null);
  443. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "blastula/TE" && x.child == 1);
  444. table.Cell().Row(row).Column(20).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null);
  445. }
  446. row++;
  447. }
  448. });
  449. });
  450. page.Footer().AlignCenter().Text("第2页").FontSize(9);
  451. });
  452. });
  453. IsUpdateAi = false;
  454. return document;
  455. //document.GenerateImages().ToList();
  456. //foreach (var item in aa)
  457. //{
  458. // testimage.Source = AppData.Instance.ByteToBitmapImage(item);
  459. // break;
  460. //}
  461. //string ss = "";
  462. //return;
  463. //return document.GeneratePdf(filePath);
  464. AppData.Instance.MainWindow.Dispatcher.Invoke(() =>
  465. {
  466. ToastMessageShow("AI报告导出成功");
  467. });
  468. }
  469. catch (Exception ex)
  470. {
  471. ExLog(ex, "GenerateReport");
  472. AppData.Instance.MainWindow.Dispatcher.Invoke(() =>
  473. {
  474. MessageBoxShow("导出AI报表错误", $"{ex.Message}");
  475. });
  476. return null;
  477. }
  478. }
  479. /// <summary>
  480. /// 无动态显示
  481. /// </summary>
  482. /// <param name="reportData"></param>
  483. /// <returns></returns>
  484. public Document GenerateReportENold(ReportMarkData reportData)
  485. {
  486. float borderLine = 0.25f;
  487. //float picHeight = 2.54f;
  488. float picHeight = 2.65f;
  489. float picPadding = 3f;
  490. float headerPaddingHorizontal = 1.0f;
  491. float pagePaddingHorizontal = 1.0f;
  492. float wellWidth = 25f;
  493. try
  494. {
  495. IContainer CellStyle(IContainer container) => container.Border(borderLine).AlignCenter().PaddingVertical(5).AlignCenter();
  496. var document = Document.Create(container =>
  497. {
  498. container
  499. .Page(page =>
  500. {
  501. page.Size(PageSizes.A4);
  502. //page.MarginHorizontal(2, Unit.Centimetre);
  503. page.MarginVertical(1.5f, Unit.Centimetre);
  504. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15));
  505. page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentHeader(LogoBytes, HosName));
  506. page.Content().PaddingTop(4.8f, Unit.Centimetre).AlignCenter().Column(col =>
  507. {
  508. col.Item().AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0567")).FontSize(25);
  509. col.Item().PaddingTop(20).AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0594")).FontSize(25);
  510. });
  511. })
  512. .Page(page =>
  513. {
  514. page.Size(PageSizes.A4);
  515. //page.MarginHorizontal(2, Unit.Centimetre);
  516. page.MarginVertical(1.5f, Unit.Centimetre);
  517. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15));
  518. page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}/{reportData.husband}", Dish.caseId, HosName));
  519. page.Content().PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col =>
  520. {
  521. col.Item().PaddingTop(10).Text(text =>
  522. {
  523. text.Span(KeyToStringConvert.GetLanguageStringByKey("0031"));
  524. text.Span($":{reportData.wife}/{reportData.husband}");
  525. });
  526. col.Item().PaddingTop(13).Text(text =>
  527. {
  528. text.Span(KeyToStringConvert.GetLanguageStringByKey("0151"));
  529. text.Span($":{Dish.caseId}");
  530. });
  531. col.Item().PaddingTop(13).Text(text =>
  532. {
  533. text.Span(KeyToStringConvert.GetLanguageStringByKey("0261"));
  534. text.Span($":{Dish.cycle}");
  535. });
  536. col.Item().PaddingTop(13).Text(text =>
  537. {
  538. text.Span(KeyToStringConvert.GetLanguageStringByKey("0032"));
  539. text.Span($":{reportData.startTime}");
  540. });
  541. col.Item().PaddingTop(13).Text(text =>
  542. {
  543. text.Span(KeyToStringConvert.GetLanguageStringByKey("0157"));
  544. text.Span($":{reportData.fertilizationType}");
  545. });
  546. col.Item().PaddingTop(13).Text(text =>
  547. {
  548. text.Span(KeyToStringConvert.GetLanguageStringByKey("0568"));
  549. text.Span($":{reportData.createTime} {KeyToStringConvert.GetLanguageStringByKey("0569")} {reportData.endTime}");
  550. });
  551. col.Item().PaddingTop(9).Table(table =>
  552. {
  553. table.ColumnsDefinition(columns =>
  554. {
  555. //columns.RelativeColumn();
  556. columns.RelativeColumn();
  557. columns.RelativeColumn();
  558. columns.RelativeColumn();
  559. });
  560. table.Header(header =>
  561. {
  562. //header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0612"));
  563. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0041"));
  564. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0040"));
  565. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0042"));
  566. });
  567. //table.Cell().AlignMiddle().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.embryoCount.ToString());
  568. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.transplant.ToString());
  569. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.freezing.ToString());
  570. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.invalid.ToString());
  571. });
  572. });
  573. //page.Footer().AlignCenter().Text("第1页").FontSize(9);
  574. page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 1 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9);
  575. })
  576. .Page(page =>
  577. {
  578. page.Size(PageSizes.A4);
  579. //page.MarginHorizontal(2, Unit.Centimetre);
  580. page.MarginVertical(1.5f, Unit.Centimetre);
  581. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15));
  582. page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}/{reportData.husband}", Dish.caseId, HosName));
  583. page.Content().PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col =>
  584. {
  585. int markCount = 0;
  586. float tableHeaderFontSize = 9f;
  587. //EmbryoMark itemMark = null;
  588. EmbryoMark markKeyPic = null;
  589. if (reportData.transplantEmbryos != null && reportData.transplantEmbryos.Any() && reportData.transplantEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null)
  590. {
  591. //col.Item().PaddingTop(9).Text("移植胚胎图像 (前2名)");
  592. col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0610"));
  593. col.Item().PaddingTop(9).Table(table =>
  594. {
  595. table.ColumnsDefinition(columns =>
  596. {
  597. columns.ConstantColumn(wellWidth);
  598. columns.RelativeColumn();
  599. columns.RelativeColumn();
  600. columns.RelativeColumn();
  601. columns.RelativeColumn();
  602. columns.RelativeColumn();
  603. columns.RelativeColumn();
  604. });
  605. table.Header(header =>
  606. {
  607. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize);
  608. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0586")).FontSize(tableHeaderFontSize);
  609. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0587")).FontSize(tableHeaderFontSize);
  610. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0588")).FontSize(tableHeaderFontSize);
  611. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0589")).FontSize(tableHeaderFontSize);
  612. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0590")).FontSize(tableHeaderFontSize);
  613. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0591")).FontSize(tableHeaderFontSize);
  614. });
  615. foreach (var item in reportData.transplantEmbryos)
  616. {
  617. if (item.embryoMark == null) continue;
  618. //item.embryoMark = item.embryoMark.OrderBy(x => x.developTime).ToList();
  619. markCount = item.embryoMark.Count;
  620. if (markCount == 0) continue;
  621. table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}");
  622. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2PN");
  623. if (markKeyPic == null)
  624. {
  625. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  626. }
  627. else
  628. {
  629. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  630. }
  631. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2-cell");
  632. if (markKeyPic == null)
  633. {
  634. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  635. }
  636. else
  637. {
  638. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  639. }
  640. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "4-cell");
  641. if (markKeyPic == null)
  642. {
  643. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  644. }
  645. else
  646. {
  647. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  648. }
  649. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "8-cell");
  650. if (markKeyPic == null)
  651. {
  652. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  653. }
  654. else
  655. {
  656. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  657. }
  658. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "fusion");
  659. if (markKeyPic == null)
  660. {
  661. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  662. }
  663. else
  664. {
  665. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  666. }
  667. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "blastula");
  668. if (markKeyPic == null)
  669. {
  670. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  671. }
  672. else
  673. {
  674. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  675. }
  676. //for (int i = 0; i < 6; i++)
  677. //{
  678. // if (i >= markCount)
  679. // {
  680. // table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  681. // continue;
  682. // }
  683. // itemMark = item.embryoMark[i];
  684. // Debug.WriteLine(itemMark.markKey);
  685. // table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{itemMark.pictureUrl}"));
  686. //}
  687. }
  688. });
  689. }
  690. if (reportData.freezingEmbryos != null && reportData.freezingEmbryos.Any() && reportData.freezingEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null)
  691. {
  692. //col.Item().PaddingTop(9).Text("冷冻胚胎图像 (前5名)");
  693. col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0611"));
  694. col.Item().PaddingTop(9).Table(table =>
  695. {
  696. table.ColumnsDefinition(columns =>
  697. {
  698. columns.ConstantColumn(wellWidth);
  699. columns.RelativeColumn();
  700. columns.RelativeColumn();
  701. columns.RelativeColumn();
  702. columns.RelativeColumn();
  703. columns.RelativeColumn();
  704. columns.RelativeColumn();
  705. });
  706. table.Header(header =>
  707. {
  708. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize);
  709. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0586")).FontSize(tableHeaderFontSize);
  710. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0587")).FontSize(tableHeaderFontSize);
  711. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0588")).FontSize(tableHeaderFontSize);
  712. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0589")).FontSize(tableHeaderFontSize);
  713. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0590")).FontSize(tableHeaderFontSize);
  714. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0591")).FontSize(tableHeaderFontSize);
  715. });
  716. foreach (var item in reportData.freezingEmbryos)
  717. {
  718. if (item.embryoMark == null) continue;
  719. item.embryoMark = item.embryoMark.OrderBy(x => x.developTime).ToList();
  720. markCount = item.embryoMark.Count;
  721. if (markCount == 0) continue;
  722. table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}");
  723. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2PN");
  724. if (markKeyPic == null)
  725. {
  726. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  727. }
  728. else
  729. {
  730. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  731. }
  732. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2-cell");
  733. if (markKeyPic == null)
  734. {
  735. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  736. }
  737. else
  738. {
  739. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  740. }
  741. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "4-cell");
  742. if (markKeyPic == null)
  743. {
  744. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  745. }
  746. else
  747. {
  748. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  749. }
  750. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "8-cell");
  751. if (markKeyPic == null)
  752. {
  753. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  754. }
  755. else
  756. {
  757. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  758. }
  759. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "fusion");
  760. if (markKeyPic == null)
  761. {
  762. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  763. }
  764. else
  765. {
  766. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  767. }
  768. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "blastula");
  769. if (markKeyPic == null)
  770. {
  771. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  772. }
  773. else
  774. {
  775. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  776. }
  777. //for (int i = 0; i < 6; i++)
  778. //{
  779. // if (i >= markCount)
  780. // {
  781. // table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  782. // continue;
  783. // }
  784. // itemMark = item.embryoMark[i];
  785. // table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{itemMark.pictureUrl}"));
  786. //}
  787. }
  788. });
  789. }
  790. });
  791. //page.Footer().AlignCenter().Text("第2页").FontSize(9);
  792. page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 2 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9);
  793. })
  794. .Page(page =>
  795. {
  796. page.Size(PageSizes.A4.Landscape());
  797. //page.MarginHorizontal(2, Unit.Centimetre);
  798. page.MarginVertical(1.5f, Unit.Centimetre);
  799. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(8));
  800. //.PaddingHorizontal(2, Unit.Centimetre).PaddingVertical(1.5f, Unit.Centimetre)
  801. page.Header().PaddingHorizontal(0.4f, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}/{reportData.husband}", Dish.caseId, HosName));
  802. var dataList = reportData.transplantEmbryos.Union(reportData.freezingEmbryos);
  803. float wi = 25f;
  804. page.Content().PaddingHorizontal(0.4f, Unit.Centimetre).AlignLeft().Column(col =>
  805. {
  806. col.Item().PaddingTop(10).Text(KeyToStringConvert.GetLanguageStringByKey("0570")).FontSize(15);
  807. col.Item().PaddingTop(9).Table(table =>
  808. {
  809. table.ColumnsDefinition(columns =>
  810. {
  811. columns.RelativeColumn();
  812. columns.RelativeColumn();
  813. columns.RelativeColumn();
  814. columns.RelativeColumn();
  815. columns.RelativeColumn();
  816. //2细胞
  817. columns.RelativeColumn();
  818. columns.RelativeColumn();
  819. columns.RelativeColumn();
  820. //4细胞
  821. columns.RelativeColumn();
  822. columns.RelativeColumn();
  823. columns.RelativeColumn();
  824. //8细胞
  825. columns.RelativeColumn();
  826. columns.RelativeColumn();
  827. columns.RelativeColumn();
  828. columns.RelativeColumn();
  829. columns.RelativeColumn();
  830. columns.RelativeColumn();
  831. columns.RelativeColumn();
  832. columns.RelativeColumn();
  833. columns.RelativeColumn();
  834. columns.RelativeColumn();
  835. columns.RelativeColumn();
  836. });
  837. table.ExtendLastCellsToTableBottom();
  838. table.Cell().Row(1).Column(1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0527"));
  839. table.Cell().Row(1).Column(2).ColumnSpan(4).Element(CellStyle).Text(KeyToStringConvert.GetLanguageStringByKey("0586"));
  840. table.Cell().Row(1).Column(6).ColumnSpan(3).Element(CellStyle).Text(KeyToStringConvert.GetLanguageStringByKey("0587"));
  841. table.Cell().Row(1).Column(9).ColumnSpan(3).Element(CellStyle).Text(KeyToStringConvert.GetLanguageStringByKey("0588"));
  842. table.Cell().Row(1).Column(12).ColumnSpan(3).Element(CellStyle).Text(KeyToStringConvert.GetLanguageStringByKey("0589"));
  843. table.Cell().Row(1).Column(15).ColumnSpan(2).Element(CellStyle).Text(KeyToStringConvert.GetLanguageStringByKey("0590"));
  844. table.Cell().Row(1).Column(17).ColumnSpan(4).Element(CellStyle).Text(KeyToStringConvert.GetLanguageStringByKey("0591"));
  845. table.Cell().Row(1).Column(21).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0596"));
  846. table.Cell().Row(1).Column(22).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0597"));
  847. table.Cell().Row(2).Column(2).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0598"));
  848. table.Cell().Row(2).Column(3).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0599"));
  849. table.Cell().Row(2).Column(4).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0600"));
  850. table.Cell().Row(2).Column(5).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0601"));
  851. table.Cell().Row(2).Column(6).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0598"));
  852. table.Cell().Row(2).Column(7).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0602"));
  853. table.Cell().Row(2).Column(8).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0603"));
  854. table.Cell().Row(2).Column(9).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0598"));
  855. table.Cell().Row(2).Column(10).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0602"));
  856. table.Cell().Row(2).Column(11).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0603"));
  857. table.Cell().Row(2).Column(12).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0598"));
  858. table.Cell().Row(2).Column(13).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0598"));
  859. table.Cell().Row(2).Column(14).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0603"));
  860. table.Cell().Row(2).Column(15).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0598"));
  861. table.Cell().Row(2).Column(16).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0604"));
  862. table.Cell().Row(2).Column(17).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0598"));
  863. table.Cell().Row(2).Column(18).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0605"));
  864. table.Cell().Row(2).Column(19).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0606"));
  865. table.Cell().Row(2).Column(20).Element(CellStyle).TextLine(KeyToStringConvert.GetLanguageStringByKey("0607"));
  866. uint row = 3;
  867. EmbryoMark keyMark = null;
  868. EmbryoMark valueMark = null;
  869. string stateString = "冷冻";
  870. foreach (var itemEmbryoMark in dataList)
  871. {
  872. table.Cell().Row(row).Column(1).Element(CellStyle).AlignMiddle().Text($"{itemEmbryoMark.wellSn}");
  873. table.Cell().Row(row).Column(21).Element(CellStyle).Text(itemEmbryoMark.score == -1 ? null : itemEmbryoMark.score.ToString());
  874. if (itemEmbryoMark.state == 2) stateString = KeyToStringConvert.GetLanguageStringByKey("0041");
  875. if (itemEmbryoMark.state == 1) stateString = KeyToStringConvert.GetLanguageStringByKey("0040");
  876. table.Cell().Row(row).Column(22).Element(CellStyle).TextLine(stateString);
  877. keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "2PN" && x.child == 1);
  878. if (keyMark == null)
  879. {
  880. table.Cell().Row(row).Column(2).Element(CellStyle);
  881. table.Cell().Row(row).Column(3).Element(CellStyle);
  882. table.Cell().Row(row).Column(4).Element(CellStyle);
  883. table.Cell().Row(row).Column(5).Element(CellStyle);
  884. }
  885. else
  886. {
  887. table.Cell().Row(row).Column(2).Element(CellStyle).TextTime(keyMark.developTime);
  888. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "2PN/PN-NUM" && x.child == 1);
  889. table.Cell().Row(row).Column(3).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null);
  890. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "nucleolus-NUM" && x.child == 1);
  891. table.Cell().Row(row).Column(4).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null);
  892. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "Z-Level" && x.child == 1);
  893. table.Cell().Row(row).Column(5).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null);
  894. }
  895. keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "2-cell" && x.child == 1);
  896. if (keyMark == null)
  897. {
  898. table.Cell().Row(row).Column(6).Element(CellStyle);
  899. table.Cell().Row(row).Column(7).Element(CellStyle);
  900. table.Cell().Row(row).Column(8).Element(CellStyle);
  901. }
  902. else
  903. {
  904. table.Cell().Row(row).Column(6).Element(CellStyle).TextTime(keyMark.developTime);
  905. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "2-cell/key_fragment" && x.child == 1);
  906. table.Cell().Row(row).Column(7).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null);
  907. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "2-cell/key_uniform" && x.child == 1);
  908. table.Cell().Row(row).Column(8).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null);
  909. }
  910. keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "4-cell" && x.child == 1);
  911. if (keyMark == null)
  912. {
  913. table.Cell().Row(row).Column(9).Element(CellStyle);
  914. table.Cell().Row(row).Column(10).Element(CellStyle);
  915. table.Cell().Row(row).Column(11).Element(CellStyle);
  916. }
  917. else
  918. {
  919. table.Cell().Row(row).Column(9).Element(CellStyle).TextTime(keyMark.developTime);
  920. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "4-cell/key_fragment" && x.child == 1);
  921. table.Cell().Row(row).Column(10).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null);
  922. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "4-cell/key_uniform" && x.child == 1);
  923. table.Cell().Row(row).Column(11).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null);
  924. }
  925. keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "8-cell" && x.child == 1);
  926. if (keyMark == null)
  927. {
  928. table.Cell().Row(row).Column(12).Element(CellStyle);
  929. table.Cell().Row(row).Column(13).Element(CellStyle);
  930. table.Cell().Row(row).Column(14).Element(CellStyle);
  931. }
  932. else
  933. {
  934. table.Cell().Row(row).Column(12).Element(CellStyle).TextTime(keyMark.developTime);
  935. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "8-cell/key_fragment" && x.child == 1);
  936. table.Cell().Row(row).Column(13).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null);
  937. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "8-cell/key_uniform" && x.child == 1);
  938. table.Cell().Row(row).Column(14).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null);
  939. }
  940. keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "fusion" && x.child == 1);
  941. if (keyMark == null)
  942. {
  943. table.Cell().Row(row).Column(15).Element(CellStyle);
  944. table.Cell().Row(row).Column(16).Element(CellStyle);
  945. }
  946. else
  947. {
  948. table.Cell().Row(row).Column(15).Element(CellStyle).TextTime(keyMark.developTime);
  949. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "Densification" && x.child == 1);
  950. table.Cell().Row(row).Column(16).Element(CellStyle).Text(valueMark != null ? valueMark.children[0].markName : null);
  951. }
  952. keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == "blastula" && x.child == 1);
  953. if (keyMark == null)
  954. {
  955. table.Cell().Row(row).Column(17).Element(CellStyle);
  956. table.Cell().Row(row).Column(18).Element(CellStyle);
  957. table.Cell().Row(row).Column(19).Element(CellStyle);
  958. table.Cell().Row(row).Column(20).Element(CellStyle);
  959. }
  960. else
  961. {
  962. table.Cell().Row(row).Column(17).Element(CellStyle).TextTime(keyMark.developTime);
  963. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "blastula/Expansion" && x.child == 1);
  964. table.Cell().Row(row).Column(18).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null);
  965. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "blastula/ICM" && x.child == 1);
  966. table.Cell().Row(row).Column(19).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null);
  967. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == "blastula/TE" && x.child == 1);
  968. table.Cell().Row(row).Column(20).Element(CellStyle).TextLine(valueMark != null ? valueMark.children[0].markName : null);
  969. }
  970. row++;
  971. }
  972. });
  973. });
  974. //page.Footer().AlignCenter().Text("第3页").FontSize(9);
  975. page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 3 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9);
  976. });
  977. });
  978. IsUpdateAi = false;
  979. return document;
  980. }
  981. catch (Exception ex)
  982. {
  983. ExLog(ex, "GenerateReport");
  984. AppData.Instance.MainWindow.Dispatcher.Invoke(() =>
  985. {
  986. //MessageBoxShow("导出AI报表错误", $"{ex.Message}");
  987. MessageBoxShow(KeyToStringConvert.GetLanguageStringByKey("0613"), $"{ex.Message}");
  988. });
  989. return null;
  990. }
  991. }
  992. /// <summary>
  993. /// 标记动态显示
  994. /// </summary>
  995. /// <param name="reportData"></param>
  996. /// <returns></returns>
  997. public Document GenerateReportENold1(ReportMarkData reportData)
  998. {
  999. float borderLine = 0.25f;
  1000. //float picHeight = 2.54f;
  1001. float picHeight = 2.65f;
  1002. float picPadding = 3f;
  1003. float headerPaddingHorizontal = 1.0f;
  1004. float pagePaddingHorizontal = 1.0f;
  1005. float wellWidth = 25f;
  1006. try
  1007. {
  1008. IContainer CellStyle(IContainer container) => container.Border(borderLine).AlignCenter().PaddingVertical(5).AlignCenter();
  1009. var document = Document.Create(container =>
  1010. {
  1011. container
  1012. .Page(page =>
  1013. {
  1014. page.Size(PageSizes.A4);
  1015. //page.MarginHorizontal(2, Unit.Centimetre);
  1016. page.MarginVertical(1.5f, Unit.Centimetre);
  1017. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15));
  1018. page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentHeader(LogoBytes, HosName));
  1019. page.Content().PaddingTop(4.8f, Unit.Centimetre).AlignCenter().Column(col =>
  1020. {
  1021. col.Item().AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0567")).FontSize(25);
  1022. col.Item().PaddingTop(20).AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0594")).FontSize(25);
  1023. });
  1024. })
  1025. .Page(page =>
  1026. {
  1027. page.Size(PageSizes.A4);
  1028. //page.MarginHorizontal(2, Unit.Centimetre);
  1029. page.MarginVertical(1.5f, Unit.Centimetre);
  1030. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15));
  1031. page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName));
  1032. page.Content().PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col =>
  1033. {
  1034. col.Item().PaddingTop(10).Text(text =>
  1035. {
  1036. text.Span(KeyToStringConvert.GetLanguageStringByKey("0031"));
  1037. text.Span($":{reportData.wife}/{reportData.husband}");
  1038. });
  1039. col.Item().PaddingTop(13).Text(text =>
  1040. {
  1041. text.Span(KeyToStringConvert.GetLanguageStringByKey("0151"));
  1042. text.Span($":{Dish.caseId}");
  1043. });
  1044. col.Item().PaddingTop(13).Text(text =>
  1045. {
  1046. text.Span(KeyToStringConvert.GetLanguageStringByKey("0261"));
  1047. text.Span($":{Dish.cycle}");
  1048. });
  1049. col.Item().PaddingTop(13).Text(text =>
  1050. {
  1051. text.Span(KeyToStringConvert.GetLanguageStringByKey("0032"));
  1052. text.Span($":{reportData.startTime}");
  1053. });
  1054. col.Item().PaddingTop(13).Text(text =>
  1055. {
  1056. text.Span(KeyToStringConvert.GetLanguageStringByKey("0157"));
  1057. text.Span($":{reportData.fertilizationType}");
  1058. });
  1059. col.Item().PaddingTop(13).Text(text =>
  1060. {
  1061. text.Span(KeyToStringConvert.GetLanguageStringByKey("0568"));
  1062. text.Span($":{reportData.createTime} {KeyToStringConvert.GetLanguageStringByKey("0569")} {reportData.endTime}");
  1063. });
  1064. col.Item().PaddingTop(9).Table(table =>
  1065. {
  1066. table.ColumnsDefinition(columns =>
  1067. {
  1068. //columns.RelativeColumn();
  1069. columns.RelativeColumn();
  1070. columns.RelativeColumn();
  1071. columns.RelativeColumn();
  1072. });
  1073. table.Header(header =>
  1074. {
  1075. //header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0612"));
  1076. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0041"));
  1077. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0040"));
  1078. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0042"));
  1079. });
  1080. //table.Cell().AlignMiddle().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.embryoCount.ToString());
  1081. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.transplant.ToString());
  1082. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.freezing.ToString());
  1083. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.invalid.ToString());
  1084. });
  1085. });
  1086. //page.Footer().AlignCenter().Text("第1页").FontSize(9);
  1087. page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 1 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9);
  1088. })
  1089. .Page(page =>
  1090. {
  1091. page.Size(PageSizes.A4);
  1092. //page.MarginHorizontal(2, Unit.Centimetre);
  1093. page.MarginVertical(1.5f, Unit.Centimetre);
  1094. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15));
  1095. page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName));
  1096. page.Content().PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col =>
  1097. {
  1098. int markCount = 0;
  1099. float tableHeaderFontSize = 9f;
  1100. //EmbryoMark itemMark = null;
  1101. EmbryoMark markKeyPic = null;
  1102. if (reportData.transplantEmbryos != null && reportData.transplantEmbryos.Any() && reportData.transplantEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null)
  1103. {
  1104. //col.Item().PaddingTop(9).Text("移植胚胎图像 (前2名)");
  1105. col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0610"));
  1106. col.Item().PaddingTop(9).Table(table =>
  1107. {
  1108. table.ColumnsDefinition(columns =>
  1109. {
  1110. columns.ConstantColumn(wellWidth);
  1111. columns.RelativeColumn();
  1112. columns.RelativeColumn();
  1113. columns.RelativeColumn();
  1114. columns.RelativeColumn();
  1115. columns.RelativeColumn();
  1116. columns.RelativeColumn();
  1117. });
  1118. table.Header(header =>
  1119. {
  1120. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize);
  1121. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0586")).FontSize(tableHeaderFontSize);
  1122. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0587")).FontSize(tableHeaderFontSize);
  1123. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0588")).FontSize(tableHeaderFontSize);
  1124. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0589")).FontSize(tableHeaderFontSize);
  1125. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0590")).FontSize(tableHeaderFontSize);
  1126. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0591")).FontSize(tableHeaderFontSize);
  1127. });
  1128. foreach (var item in reportData.transplantEmbryos)
  1129. {
  1130. if (item.embryoMark == null) continue;
  1131. //item.embryoMark = item.embryoMark.OrderBy(x => x.developTime).ToList();
  1132. markCount = item.embryoMark.Count;
  1133. if (markCount == 0) continue;
  1134. table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}");
  1135. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2PN");
  1136. if (markKeyPic == null)
  1137. {
  1138. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1139. }
  1140. else
  1141. {
  1142. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1143. }
  1144. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2-cell");
  1145. if (markKeyPic == null)
  1146. {
  1147. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1148. }
  1149. else
  1150. {
  1151. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1152. }
  1153. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "4-cell");
  1154. if (markKeyPic == null)
  1155. {
  1156. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1157. }
  1158. else
  1159. {
  1160. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1161. }
  1162. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "8-cell");
  1163. if (markKeyPic == null)
  1164. {
  1165. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1166. }
  1167. else
  1168. {
  1169. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1170. }
  1171. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "fusion");
  1172. if (markKeyPic == null)
  1173. {
  1174. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1175. }
  1176. else
  1177. {
  1178. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1179. }
  1180. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "blastula");
  1181. if (markKeyPic == null)
  1182. {
  1183. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1184. }
  1185. else
  1186. {
  1187. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1188. }
  1189. }
  1190. });
  1191. }
  1192. if (reportData.freezingEmbryos != null && reportData.freezingEmbryos.Any() && reportData.freezingEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null)
  1193. {
  1194. //col.Item().PaddingTop(9).Text("冷冻胚胎图像 (前5名)");
  1195. col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0611"));
  1196. col.Item().PaddingTop(9).Table(table =>
  1197. {
  1198. table.ColumnsDefinition(columns =>
  1199. {
  1200. columns.ConstantColumn(wellWidth);
  1201. columns.RelativeColumn();
  1202. columns.RelativeColumn();
  1203. columns.RelativeColumn();
  1204. columns.RelativeColumn();
  1205. columns.RelativeColumn();
  1206. columns.RelativeColumn();
  1207. });
  1208. table.Header(header =>
  1209. {
  1210. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize);
  1211. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0586")).FontSize(tableHeaderFontSize);
  1212. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0587")).FontSize(tableHeaderFontSize);
  1213. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0588")).FontSize(tableHeaderFontSize);
  1214. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0589")).FontSize(tableHeaderFontSize);
  1215. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0590")).FontSize(tableHeaderFontSize);
  1216. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0591")).FontSize(tableHeaderFontSize);
  1217. });
  1218. foreach (var item in reportData.freezingEmbryos)
  1219. {
  1220. if (item.embryoMark == null) continue;
  1221. item.embryoMark = item.embryoMark.OrderBy(x => x.developTime).ToList();
  1222. markCount = item.embryoMark.Count;
  1223. if (markCount == 0) continue;
  1224. table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}");
  1225. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2PN");
  1226. if (markKeyPic == null)
  1227. {
  1228. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1229. }
  1230. else
  1231. {
  1232. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1233. }
  1234. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "2-cell");
  1235. if (markKeyPic == null)
  1236. {
  1237. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1238. }
  1239. else
  1240. {
  1241. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1242. }
  1243. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "4-cell");
  1244. if (markKeyPic == null)
  1245. {
  1246. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1247. }
  1248. else
  1249. {
  1250. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1251. }
  1252. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "8-cell");
  1253. if (markKeyPic == null)
  1254. {
  1255. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1256. }
  1257. else
  1258. {
  1259. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1260. }
  1261. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "fusion");
  1262. if (markKeyPic == null)
  1263. {
  1264. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1265. }
  1266. else
  1267. {
  1268. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1269. }
  1270. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == "blastula");
  1271. if (markKeyPic == null)
  1272. {
  1273. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1274. }
  1275. else
  1276. {
  1277. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1278. }
  1279. //for (int i = 0; i < 6; i++)
  1280. //{
  1281. // if (i >= markCount)
  1282. // {
  1283. // table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1284. // continue;
  1285. // }
  1286. // itemMark = item.embryoMark[i];
  1287. // table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{itemMark.pictureUrl}"));
  1288. //}
  1289. }
  1290. });
  1291. }
  1292. });
  1293. //page.Footer().AlignCenter().Text("第2页").FontSize(9);
  1294. page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 2 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9);
  1295. })
  1296. .Page(page =>
  1297. {
  1298. page.Size(PageSizes.A4.Landscape());
  1299. //page.MarginHorizontal(2, Unit.Centimetre);
  1300. page.MarginVertical(1.5f, Unit.Centimetre);
  1301. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(8));
  1302. //.PaddingHorizontal(2, Unit.Centimetre).PaddingVertical(1.5f, Unit.Centimetre)
  1303. page.Header().PaddingHorizontal(0.4f, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName));
  1304. var dataList = reportData.transplantEmbryos.Union(reportData.freezingEmbryos);
  1305. float wi = 25f;
  1306. int columnCount = 0;
  1307. page.Content().PaddingHorizontal(0.4f, Unit.Centimetre).AlignLeft().Column(col =>
  1308. {
  1309. col.Item().PaddingTop(10).Text(KeyToStringConvert.GetLanguageStringByKey("0570")).FontSize(15);
  1310. col.Item().PaddingTop(9).Table(table =>
  1311. {
  1312. //columns.ConstantColumn(wi);
  1313. table.ColumnsDefinition(columns =>
  1314. {
  1315. columnCount = 3 + ChildrenMarkCount + MarkEntityList.Count;
  1316. for (int i = 0; i < columnCount; i++)
  1317. {
  1318. columns.RelativeColumn();
  1319. }
  1320. });
  1321. table.ExtendLastCellsToTableBottom();
  1322. table.Cell().Row(1).Column(1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0527"));
  1323. uint headerNum1 = 2;
  1324. uint headerNum2 = 2;
  1325. foreach (var item in MarkEntityList)
  1326. {
  1327. table.Cell().Row(1).Column(headerNum1).ColumnSpan((uint)(item.children.Count + 1)).Element(CellStyle).AlignMiddle().TextLine(item.name);
  1328. headerNum1 += (uint)(item.children.Count + 1);
  1329. table.Cell().Row(2).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0598"));
  1330. foreach (var childrenItem in item.children)
  1331. {
  1332. table.Cell().Row(2).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextLine(childrenItem.name);
  1333. }
  1334. }
  1335. table.Cell().Row(1).Column(headerNum1++).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0596"));
  1336. table.Cell().Row(1).Column(headerNum1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0597"));
  1337. uint row = 3;
  1338. EmbryoMark keyMark = null;
  1339. EmbryoMark valueMark = null;
  1340. string stateString = "冷冻";
  1341. foreach (var itemEmbryoMark in dataList)
  1342. {
  1343. table.Cell().Row(row).Column(1).Element(CellStyle).AlignMiddle().Text($"{itemEmbryoMark.wellSn}");
  1344. table.Cell().Row(row).Column(headerNum1 - 1).Element(CellStyle).AlignMiddle().Text(itemEmbryoMark.score == -1 ? null : itemEmbryoMark.score.ToString());
  1345. if (itemEmbryoMark.state == 2) stateString = KeyToStringConvert.GetLanguageStringByKey("0041");
  1346. if (itemEmbryoMark.state == 1) stateString = KeyToStringConvert.GetLanguageStringByKey("0040");
  1347. table.Cell().Row(row).Column(headerNum1).Element(CellStyle).AlignMiddle().TextLine(stateString);
  1348. headerNum2 = 2;
  1349. foreach (var headerMark in MarkEntityList)
  1350. {
  1351. keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == headerMark.markKey && x.child == 1);
  1352. if (keyMark == null)
  1353. {
  1354. columnCount = headerMark.children.Count + 1;
  1355. for (int i = 0; i < columnCount; i++)
  1356. {
  1357. table.Cell().Row(row).Column(headerNum2++).Element(CellStyle);
  1358. }
  1359. }
  1360. else
  1361. {
  1362. table.Cell().Row(row).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextTime(keyMark.developTime);
  1363. foreach (var childrenMarl in headerMark.children)
  1364. {
  1365. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == childrenMarl.markKey && x.child == 1);
  1366. table.Cell().Row(row).Column(headerNum2++).Element(CellStyle).AlignMiddle().Text(valueMark != null ? valueMark.children[0].markName : null);
  1367. }
  1368. }
  1369. }
  1370. row++;
  1371. }
  1372. });
  1373. });
  1374. page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 3 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9);
  1375. });
  1376. });
  1377. IsUpdateAi = false;
  1378. return document;
  1379. }
  1380. catch (Exception ex)
  1381. {
  1382. ExLog(ex, "GenerateReport");
  1383. AppData.Instance.MainWindow.Dispatcher.Invoke(() =>
  1384. {
  1385. //MessageBoxShow("导出AI报表错误", $"{ex.Message}");
  1386. MessageBoxShow(KeyToStringConvert.GetLanguageStringByKey("0613"), $"{ex.Message}");
  1387. });
  1388. return null;
  1389. }
  1390. }
  1391. /// <summary>
  1392. /// 图像和标记都动态显示
  1393. /// </summary>
  1394. /// <param name="reportData"></param>
  1395. /// <returns></returns>
  1396. public Document GenerateReportENOld2(ReportMarkData reportData)
  1397. {
  1398. float borderLine = 0.25f;
  1399. //float picHeight = 2.54f;
  1400. float picHeight = 2.65f;
  1401. float picPadding = 3f;
  1402. float headerPaddingHorizontal = 1.0f;
  1403. float pagePaddingHorizontal = 1.0f;
  1404. float wellWidth = 25f;
  1405. try
  1406. {
  1407. IContainer CellStyle(IContainer container) => container.Border(borderLine).AlignCenter().PaddingVertical(5).AlignCenter();
  1408. var document = Document.Create(container =>
  1409. {
  1410. container
  1411. .Page(page =>
  1412. {
  1413. page.Size(PageSizes.A4);
  1414. //page.MarginHorizontal(2, Unit.Centimetre);
  1415. page.MarginVertical(1.5f, Unit.Centimetre);
  1416. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15));
  1417. page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentHeader(LogoBytes, HosName));
  1418. page.Content().PaddingTop(4.8f, Unit.Centimetre).AlignCenter().Column(col =>
  1419. {
  1420. col.Item().AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0567")).FontSize(25);
  1421. col.Item().PaddingTop(20).AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0594")).FontSize(25);
  1422. });
  1423. })
  1424. .Page(page =>
  1425. {
  1426. page.Size(PageSizes.A4);
  1427. //page.MarginHorizontal(2, Unit.Centimetre);
  1428. page.MarginVertical(1.5f, Unit.Centimetre);
  1429. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15));
  1430. page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName));
  1431. page.Content().PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col =>
  1432. {
  1433. col.Item().PaddingTop(10).Text(text =>
  1434. {
  1435. text.Span(KeyToStringConvert.GetLanguageStringByKey("0031"));
  1436. text.Span($":{reportData.wife}/{reportData.husband}");
  1437. });
  1438. col.Item().PaddingTop(13).Text(text =>
  1439. {
  1440. text.Span(KeyToStringConvert.GetLanguageStringByKey("0151"));
  1441. text.Span($":{Dish.caseId}");
  1442. });
  1443. col.Item().PaddingTop(13).Text(text =>
  1444. {
  1445. text.Span(KeyToStringConvert.GetLanguageStringByKey("0261"));
  1446. text.Span($":{Dish.cycle}");
  1447. });
  1448. col.Item().PaddingTop(13).Text(text =>
  1449. {
  1450. text.Span(KeyToStringConvert.GetLanguageStringByKey("0032"));
  1451. text.Span($":{reportData.startTime}");
  1452. });
  1453. col.Item().PaddingTop(13).Text(text =>
  1454. {
  1455. text.Span(KeyToStringConvert.GetLanguageStringByKey("0157"));
  1456. text.Span($":{reportData.fertilizationType}");
  1457. });
  1458. col.Item().PaddingTop(13).Text(text =>
  1459. {
  1460. text.Span(KeyToStringConvert.GetLanguageStringByKey("0568"));
  1461. text.Span($":{reportData.createTime} {KeyToStringConvert.GetLanguageStringByKey("0569")} {reportData.endTime}");
  1462. });
  1463. col.Item().PaddingTop(9).Table(table =>
  1464. {
  1465. table.ColumnsDefinition(columns =>
  1466. {
  1467. //columns.RelativeColumn();
  1468. columns.RelativeColumn();
  1469. columns.RelativeColumn();
  1470. columns.RelativeColumn();
  1471. });
  1472. table.Header(header =>
  1473. {
  1474. //header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0612"));
  1475. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0041"));
  1476. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0040"));
  1477. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0042"));
  1478. });
  1479. //table.Cell().AlignMiddle().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.embryoCount.ToString());
  1480. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.transplant.ToString());
  1481. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.freezing.ToString());
  1482. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.invalid.ToString());
  1483. });
  1484. });
  1485. //page.Footer().AlignCenter().Text("第1页").FontSize(9);
  1486. page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 1 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9);
  1487. })
  1488. .Page(page =>
  1489. {
  1490. page.Size(PageSizes.A4);
  1491. //page.MarginHorizontal(2, Unit.Centimetre);
  1492. page.MarginVertical(1.5f, Unit.Centimetre);
  1493. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15));
  1494. page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName));
  1495. page.Content().MinHeight(500f).PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col =>
  1496. {
  1497. bool haveContent = false;
  1498. int markCount = 0;
  1499. float tableHeaderFontSize = 9f;
  1500. List<EmbryoMark> headerMarkList = new List<EmbryoMark>();
  1501. //EmbryoMark itemMark = null;
  1502. EmbryoMark markKeyPic = null;
  1503. MarkEntity orderMark = null;
  1504. if (reportData.transplantEmbryos != null && reportData.transplantEmbryos.Any() && reportData.transplantEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null)
  1505. {
  1506. haveContent = true;
  1507. foreach (var item in reportData.transplantEmbryos)
  1508. {
  1509. if (item.embryoMark == null) continue;
  1510. foreach (var markItem in item.embryoMark)
  1511. {
  1512. if (headerMarkList.FirstOrDefault(x => x.markKey == markItem.markKey) == null)
  1513. {
  1514. orderMark = MarkEntityList.FirstOrDefault(x => x.markKey == markItem.markKey);
  1515. headerMarkList.Add(new EmbryoMark { markName = markItem.markName, markKey = markItem.markKey, orderNum = orderMark != null ? orderMark.orderNum : 0 });
  1516. }
  1517. }
  1518. }
  1519. //col.Item().PaddingTop(9).Text("移植胚胎图像 (前2名)");
  1520. col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0610"));
  1521. headerMarkList = headerMarkList.OrderBy(x => x.orderNum).ToList();
  1522. markCount = headerMarkList.Count;
  1523. col.Item().PaddingTop(9).Table(table =>
  1524. {
  1525. table.ColumnsDefinition(columns =>
  1526. {
  1527. columns.ConstantColumn(wellWidth);
  1528. for (int i = 0; i < markCount; i++)
  1529. {
  1530. columns.RelativeColumn();
  1531. }
  1532. });
  1533. table.Header(header =>
  1534. {
  1535. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize);
  1536. foreach (var item in headerMarkList)
  1537. {
  1538. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(item.markName).FontSize(tableHeaderFontSize);
  1539. }
  1540. });
  1541. foreach (var item in reportData.transplantEmbryos)
  1542. {
  1543. if (item.embryoMark == null || !item.embryoMark.Any()) continue;
  1544. table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}");
  1545. foreach (var headerMark in headerMarkList)
  1546. {
  1547. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == headerMark.markKey);
  1548. if (markKeyPic == null)
  1549. {
  1550. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1551. }
  1552. else
  1553. {
  1554. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1555. }
  1556. }
  1557. }
  1558. });
  1559. }
  1560. if (reportData.freezingEmbryos != null && reportData.freezingEmbryos.Any() && reportData.freezingEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null)
  1561. {
  1562. haveContent = true;
  1563. headerMarkList.Clear();
  1564. foreach (var item in reportData.freezingEmbryos)
  1565. {
  1566. if (item.embryoMark == null) continue;
  1567. foreach (var markItem in item.embryoMark)
  1568. {
  1569. if (headerMarkList.FirstOrDefault(x => x.markKey == markItem.markKey) == null)
  1570. {
  1571. orderMark = MarkEntityList.FirstOrDefault(x => x.markKey == markItem.markKey);
  1572. headerMarkList.Add(new EmbryoMark { markName = markItem.markName, markKey = markItem.markKey, orderNum = orderMark != null ? orderMark.orderNum : 0 });
  1573. }
  1574. }
  1575. }
  1576. //col.Item().PaddingTop(9).Text("冷冻胚胎图像 (前5名)");
  1577. col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0611"));
  1578. headerMarkList = headerMarkList.OrderBy(x => x.orderNum).ToList();
  1579. markCount = headerMarkList.Count;
  1580. col.Item().PaddingTop(9).Table(table =>
  1581. {
  1582. table.ColumnsDefinition(columns =>
  1583. {
  1584. columns.ConstantColumn(wellWidth);
  1585. for (int i = 0; i < markCount; i++)
  1586. {
  1587. columns.RelativeColumn();
  1588. }
  1589. });
  1590. table.Header(header =>
  1591. {
  1592. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize);
  1593. foreach (var item in headerMarkList)
  1594. {
  1595. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(item.markName).FontSize(tableHeaderFontSize);
  1596. }
  1597. });
  1598. foreach (var item in reportData.freezingEmbryos)
  1599. {
  1600. if (item.embryoMark == null || !item.embryoMark.Any()) continue;
  1601. table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}");
  1602. foreach (var headerMark in headerMarkList)
  1603. {
  1604. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == headerMark.markKey);
  1605. if (markKeyPic == null)
  1606. {
  1607. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1608. }
  1609. else
  1610. {
  1611. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1612. }
  1613. }
  1614. }
  1615. });
  1616. }
  1617. if (!haveContent) col.Item().Text("");
  1618. });
  1619. //page.Footer().AlignCenter().Text("第2页").FontSize(9);
  1620. page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 2 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9);
  1621. })
  1622. .Page(page =>
  1623. {
  1624. page.Size(PageSizes.A4.Landscape());
  1625. //page.MarginHorizontal(2, Unit.Centimetre);
  1626. page.MarginVertical(1.5f, Unit.Centimetre);
  1627. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(8));
  1628. //.PaddingHorizontal(2, Unit.Centimetre).PaddingVertical(1.5f, Unit.Centimetre)
  1629. page.Header().PaddingHorizontal(0.4f, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName));
  1630. var dataList = reportData.transplantEmbryos.Union(reportData.freezingEmbryos);
  1631. float wi = 25f;
  1632. int columnCount = 0;
  1633. page.Content().PaddingHorizontal(0.4f, Unit.Centimetre).AlignLeft().Column(col =>
  1634. {
  1635. col.Item().PaddingTop(10).Text(KeyToStringConvert.GetLanguageStringByKey("0570")).FontSize(15);
  1636. col.Item().PaddingTop(9).Table(table =>
  1637. {
  1638. //columns.ConstantColumn(wi);
  1639. table.ColumnsDefinition(columns =>
  1640. {
  1641. columnCount = 3 + ChildrenMarkCount + MarkEntityList.Count;
  1642. for (int i = 0; i < columnCount; i++)
  1643. {
  1644. columns.RelativeColumn();
  1645. }
  1646. });
  1647. table.ExtendLastCellsToTableBottom();
  1648. table.Cell().Row(1).Column(1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0527"));
  1649. uint headerNum1 = 2;
  1650. uint headerNum2 = 2;
  1651. foreach (var item in MarkEntityList)
  1652. {
  1653. table.Cell().Row(1).Column(headerNum1).ColumnSpan((uint)(item.children.Count + 1)).Element(CellStyle).AlignMiddle().TextLine(item.name);
  1654. headerNum1 += (uint)(item.children.Count + 1);
  1655. table.Cell().Row(2).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0598"));
  1656. foreach (var childrenItem in item.children)
  1657. {
  1658. table.Cell().Row(2).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextLine(childrenItem.name);
  1659. }
  1660. }
  1661. table.Cell().Row(1).Column(headerNum1++).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0596"));
  1662. table.Cell().Row(1).Column(headerNum1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0597"));
  1663. uint row = 3;
  1664. EmbryoMark keyMark = null;
  1665. EmbryoMark valueMark = null;
  1666. string stateString = "冷冻";
  1667. foreach (var itemEmbryoMark in dataList)
  1668. {
  1669. table.Cell().Row(row).Column(1).Element(CellStyle).AlignMiddle().Text($"{itemEmbryoMark.wellSn}");
  1670. table.Cell().Row(row).Column(headerNum1 - 1).Element(CellStyle).AlignMiddle().Text(itemEmbryoMark.score == -1 ? null : itemEmbryoMark.score.ToString());
  1671. if (itemEmbryoMark.state == 2) stateString = KeyToStringConvert.GetLanguageStringByKey("0041");
  1672. if (itemEmbryoMark.state == 1) stateString = KeyToStringConvert.GetLanguageStringByKey("0040");
  1673. table.Cell().Row(row).Column(headerNum1).Element(CellStyle).AlignMiddle().TextLine(stateString);
  1674. headerNum2 = 2;
  1675. foreach (var headerMark in MarkEntityList)
  1676. {
  1677. keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == headerMark.markKey && x.child == 1);
  1678. if (keyMark == null)
  1679. {
  1680. columnCount = headerMark.children.Count + 1;
  1681. for (int i = 0; i < columnCount; i++)
  1682. {
  1683. table.Cell().Row(row).Column(headerNum2++).Element(CellStyle);
  1684. }
  1685. }
  1686. else
  1687. {
  1688. table.Cell().Row(row).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextTime(keyMark.developTime);
  1689. foreach (var childrenMarl in headerMark.children)
  1690. {
  1691. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == childrenMarl.markKey && x.child == 1);
  1692. table.Cell().Row(row).Column(headerNum2++).Element(CellStyle).AlignMiddle().Text(valueMark != null ? valueMark.children[0].markName : null);
  1693. }
  1694. }
  1695. }
  1696. row++;
  1697. }
  1698. });
  1699. });
  1700. page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 3 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9);
  1701. });
  1702. });
  1703. IsUpdateAi = false;
  1704. return document;
  1705. }
  1706. catch (Exception ex)
  1707. {
  1708. ExLog(ex, "GenerateReport");
  1709. AppData.Instance.MainWindow.Dispatcher.Invoke(() =>
  1710. {
  1711. //MessageBoxShow("导出AI报表错误", $"{ex.Message}");
  1712. MessageBoxShow(KeyToStringConvert.GetLanguageStringByKey("0613"), $"{ex.Message}");
  1713. });
  1714. return null;
  1715. }
  1716. }
  1717. /// <summary>
  1718. /// 调整页边距,图片页面最多8个
  1719. /// </summary>
  1720. /// <param name="reportData"></param>
  1721. /// <returns></returns>
  1722. public Document GenerateReportEN(ReportMarkData reportData)
  1723. {
  1724. float borderLine = 0.25f;
  1725. //float picHeight = 2.54f;
  1726. //float picHeight = 2.65f; 7张图片
  1727. float picHeight = 2.25f;
  1728. float picPadding = 3f;
  1729. //float headerPaddingHorizontal = 1.0f;
  1730. //float pagePaddingHorizontal = 1.0f;
  1731. float headerPaddingHorizontal = 0.4f;
  1732. float pagePaddingHorizontal = 0.4f;
  1733. float wellWidth = 25f;
  1734. float picWidth = 2.4f;
  1735. int picNum = 8;
  1736. try
  1737. {
  1738. IContainer CellStyle(IContainer container) => container.Border(borderLine).AlignCenter().PaddingVertical(5).AlignCenter();
  1739. var document = Document.Create(container =>
  1740. {
  1741. container
  1742. .Page(page =>
  1743. {
  1744. page.Size(PageSizes.A4);
  1745. //page.MarginHorizontal(2, Unit.Centimetre);
  1746. page.MarginVertical(1.5f, Unit.Centimetre);
  1747. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15));
  1748. page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentHeader(LogoBytes, HosName));
  1749. page.Content().PaddingTop(4.8f, Unit.Centimetre).AlignCenter().Column(col =>
  1750. {
  1751. col.Item().AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0567")).FontSize(25);
  1752. col.Item().PaddingTop(20).AlignCenter().Text(KeyToStringConvert.GetLanguageStringByKey("0594")).FontSize(25);
  1753. });
  1754. })
  1755. .Page(page =>
  1756. {
  1757. page.Size(PageSizes.A4);
  1758. //page.MarginHorizontal(2, Unit.Centimetre);
  1759. page.MarginVertical(1.5f, Unit.Centimetre);
  1760. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15));
  1761. page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName));
  1762. page.Content().PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col =>
  1763. {
  1764. col.Item().PaddingTop(10).Text(text =>
  1765. {
  1766. text.Span(KeyToStringConvert.GetLanguageStringByKey("0031"));
  1767. text.Span($":{reportData.wife}/{reportData.husband}");
  1768. });
  1769. col.Item().PaddingTop(13).Text(text =>
  1770. {
  1771. text.Span(KeyToStringConvert.GetLanguageStringByKey("0151"));
  1772. text.Span($":{Dish.caseId}");
  1773. });
  1774. col.Item().PaddingTop(13).Text(text =>
  1775. {
  1776. text.Span(KeyToStringConvert.GetLanguageStringByKey("0261"));
  1777. text.Span($":{Dish.cycle}");
  1778. });
  1779. col.Item().PaddingTop(13).Text(text =>
  1780. {
  1781. text.Span(KeyToStringConvert.GetLanguageStringByKey("0032"));
  1782. text.Span($":{reportData.startTime}");
  1783. });
  1784. col.Item().PaddingTop(13).Text(text =>
  1785. {
  1786. text.Span(KeyToStringConvert.GetLanguageStringByKey("0157"));
  1787. text.Span($":{reportData.fertilizationType}");
  1788. });
  1789. col.Item().PaddingTop(13).Text(text =>
  1790. {
  1791. text.Span(KeyToStringConvert.GetLanguageStringByKey("0568"));
  1792. text.Span($":{reportData.createTime} {KeyToStringConvert.GetLanguageStringByKey("0569")} {reportData.endTime}");
  1793. });
  1794. col.Item().PaddingTop(9).Table(table =>
  1795. {
  1796. table.ColumnsDefinition(columns =>
  1797. {
  1798. //columns.RelativeColumn();
  1799. columns.RelativeColumn();
  1800. columns.RelativeColumn();
  1801. columns.RelativeColumn();
  1802. });
  1803. table.Header(header =>
  1804. {
  1805. //header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0612"));
  1806. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0041"));
  1807. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0040"));
  1808. header.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0042"));
  1809. });
  1810. //table.Cell().AlignMiddle().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.embryoCount.ToString());
  1811. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.transplant.ToString());
  1812. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.freezing.ToString());
  1813. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(5).Text(reportData.invalid.ToString());
  1814. });
  1815. });
  1816. //page.Footer().AlignCenter().Text("第1页").FontSize(9);
  1817. page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 1 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9);
  1818. })
  1819. .Page(page =>
  1820. {
  1821. page.Size(PageSizes.A4);
  1822. //page.MarginHorizontal(2, Unit.Centimetre);
  1823. page.MarginVertical(1.5f, Unit.Centimetre);
  1824. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(15));
  1825. page.Header().PaddingHorizontal(headerPaddingHorizontal, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName));
  1826. page.Content().MinHeight(500f).PaddingHorizontal(pagePaddingHorizontal, Unit.Centimetre).AlignLeft().Column(col =>
  1827. {
  1828. bool haveContent = false;
  1829. int markCount = 0;
  1830. float tableHeaderFontSize = 9f;
  1831. List<EmbryoMark> headerMarkList = new List<EmbryoMark>();
  1832. //EmbryoMark itemMark = null;
  1833. EmbryoMark markKeyPic = null;
  1834. MarkEntity orderMark = null;
  1835. if (reportData.transplantEmbryos != null && reportData.transplantEmbryos.Any() && reportData.transplantEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null)
  1836. {
  1837. haveContent = true;
  1838. foreach (var item in reportData.transplantEmbryos)
  1839. {
  1840. if (item.embryoMark == null) continue;
  1841. foreach (var markItem in item.embryoMark)
  1842. {
  1843. if (headerMarkList.FirstOrDefault(x => x.markKey == markItem.markKey) == null)
  1844. {
  1845. orderMark = MarkEntityList.FirstOrDefault(x => x.markKey == markItem.markKey);
  1846. headerMarkList.Add(new EmbryoMark { markName = markItem.markName, markKey = markItem.markKey, orderNum = orderMark != null ? orderMark.orderNum : 0 });
  1847. }
  1848. }
  1849. }
  1850. //col.Item().PaddingTop(9).Text("移植胚胎图像 (前2名)");
  1851. col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0610"));
  1852. headerMarkList = headerMarkList.OrderBy(x => x.orderNum).Take(picNum).ToList();
  1853. markCount = headerMarkList.Count;
  1854. col.Item().PaddingTop(9).Table(table =>
  1855. {
  1856. table.ColumnsDefinition(columns =>
  1857. {
  1858. columns.ConstantColumn(wellWidth);
  1859. for (int i = 0; i < markCount; i++)
  1860. {
  1861. //columns.RelativeColumn();
  1862. columns.ConstantColumn(picWidth, Unit.Centimetre);
  1863. }
  1864. });
  1865. table.Header(header =>
  1866. {
  1867. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize);
  1868. foreach (var item in headerMarkList)
  1869. {
  1870. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(item.markName).FontSize(tableHeaderFontSize);
  1871. }
  1872. });
  1873. foreach (var item in reportData.transplantEmbryos)
  1874. {
  1875. if (item.embryoMark == null || !item.embryoMark.Any()) continue;
  1876. table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}");
  1877. foreach (var headerMark in headerMarkList)
  1878. {
  1879. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == headerMark.markKey);
  1880. if (markKeyPic == null)
  1881. {
  1882. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1883. }
  1884. else
  1885. {
  1886. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1887. }
  1888. }
  1889. }
  1890. });
  1891. }
  1892. if (reportData.freezingEmbryos != null && reportData.freezingEmbryos.Any() && reportData.freezingEmbryos.FirstOrDefault(x => x.embryoMark != null && x.embryoMark.Any()) != null)
  1893. {
  1894. haveContent = true;
  1895. headerMarkList.Clear();
  1896. foreach (var item in reportData.freezingEmbryos)
  1897. {
  1898. if (item.embryoMark == null) continue;
  1899. foreach (var markItem in item.embryoMark)
  1900. {
  1901. if (headerMarkList.FirstOrDefault(x => x.markKey == markItem.markKey) == null)
  1902. {
  1903. orderMark = MarkEntityList.FirstOrDefault(x => x.markKey == markItem.markKey);
  1904. headerMarkList.Add(new EmbryoMark { markName = markItem.markName, markKey = markItem.markKey, orderNum = orderMark != null ? orderMark.orderNum : 0 });
  1905. }
  1906. }
  1907. }
  1908. //col.Item().PaddingTop(9).Text("冷冻胚胎图像 (前5名)");
  1909. col.Item().PaddingTop(9).Text(KeyToStringConvert.GetLanguageStringByKey("0611"));
  1910. headerMarkList = headerMarkList.OrderBy(x => x.orderNum).Take(picNum).ToList();
  1911. markCount = headerMarkList.Count;
  1912. col.Item().PaddingTop(9).Table(table =>
  1913. {
  1914. table.ColumnsDefinition(columns =>
  1915. {
  1916. columns.ConstantColumn(wellWidth);
  1917. for (int i = 0; i < markCount; i++)
  1918. {
  1919. //columns.RelativeColumn();
  1920. columns.ConstantColumn(picWidth, Unit.Centimetre);
  1921. }
  1922. });
  1923. table.Header(header =>
  1924. {
  1925. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(KeyToStringConvert.GetLanguageStringByKey("0527")).FontSize(tableHeaderFontSize);
  1926. foreach (var item in headerMarkList)
  1927. {
  1928. header.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(5).Text(item.markName).FontSize(tableHeaderFontSize);
  1929. }
  1930. });
  1931. foreach (var item in reportData.freezingEmbryos)
  1932. {
  1933. if (item.embryoMark == null || !item.embryoMark.Any()) continue;
  1934. table.Cell().Border(borderLine).AlignCenter().AlignMiddle().PaddingVertical(3).Text($"{item.wellSn}");
  1935. foreach (var headerMark in headerMarkList)
  1936. {
  1937. markKeyPic = item.embryoMark.FirstOrDefault(x => x.markKey == headerMark.markKey);
  1938. if (markKeyPic == null)
  1939. {
  1940. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre);
  1941. }
  1942. else
  1943. {
  1944. table.Cell().Border(borderLine).AlignCenter().PaddingVertical(picPadding).Height(picHeight, Unit.Centimetre).LoadImage(dishProvider.GetImageByte($"{AppData.Instance.BaseUrl}{markKeyPic.pictureUrl}"));
  1945. }
  1946. }
  1947. }
  1948. });
  1949. }
  1950. if (!haveContent) col.Item().Text("");
  1951. });
  1952. //page.Footer().AlignCenter().Text("第2页").FontSize(9);
  1953. page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 2 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9);
  1954. })
  1955. .Page(page =>
  1956. {
  1957. page.Size(PageSizes.A4.Landscape());
  1958. //page.MarginHorizontal(2, Unit.Centimetre);
  1959. page.MarginVertical(1.5f, Unit.Centimetre);
  1960. page.DefaultTextStyle(x => x.FontFamily("SimSun").FontSize(8));
  1961. //.PaddingHorizontal(2, Unit.Centimetre).PaddingVertical(1.5f, Unit.Centimetre)
  1962. page.Header().PaddingHorizontal(0.4f, Unit.Centimetre).Component(new HeaderComponentNew(LogoBytes, $"{reportData.wife}", Dish.caseId, HosName));
  1963. var dataList = reportData.transplantEmbryos.Union(reportData.freezingEmbryos);
  1964. float wi = 25f;
  1965. int columnCount = 0;
  1966. page.Content().PaddingHorizontal(0.4f, Unit.Centimetre).AlignLeft().Column(col =>
  1967. {
  1968. col.Item().PaddingTop(10).Text(KeyToStringConvert.GetLanguageStringByKey("0570")).FontSize(15);
  1969. col.Item().PaddingTop(9).Table(table =>
  1970. {
  1971. //columns.ConstantColumn(wi);
  1972. table.ColumnsDefinition(columns =>
  1973. {
  1974. columnCount = 3 + ChildrenMarkCount + MarkEntityList.Count;
  1975. for (int i = 0; i < columnCount; i++)
  1976. {
  1977. columns.RelativeColumn();
  1978. }
  1979. });
  1980. table.ExtendLastCellsToTableBottom();
  1981. table.Cell().Row(1).Column(1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0527"));
  1982. uint headerNum1 = 2;
  1983. uint headerNum2 = 2;
  1984. foreach (var item in MarkEntityList)
  1985. {
  1986. table.Cell().Row(1).Column(headerNum1).ColumnSpan((uint)(item.children.Count + 1)).Element(CellStyle).AlignMiddle().TextLine(item.name);
  1987. headerNum1 += (uint)(item.children.Count + 1);
  1988. table.Cell().Row(2).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0598"));
  1989. foreach (var childrenItem in item.children)
  1990. {
  1991. table.Cell().Row(2).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextLine(childrenItem.name);
  1992. }
  1993. }
  1994. table.Cell().Row(1).Column(headerNum1++).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0596"));
  1995. table.Cell().Row(1).Column(headerNum1).RowSpan(2).Element(CellStyle).AlignMiddle().TextLine(KeyToStringConvert.GetLanguageStringByKey("0597"));
  1996. uint row = 3;
  1997. EmbryoMark keyMark = null;
  1998. EmbryoMark valueMark = null;
  1999. string stateString = "冷冻";
  2000. foreach (var itemEmbryoMark in dataList)
  2001. {
  2002. table.Cell().Row(row).Column(1).Element(CellStyle).AlignMiddle().Text($"{itemEmbryoMark.wellSn}");
  2003. table.Cell().Row(row).Column(headerNum1 - 1).Element(CellStyle).AlignMiddle().Text(itemEmbryoMark.score == -1 ? null : itemEmbryoMark.score.ToString());
  2004. if (itemEmbryoMark.state == 2) stateString = KeyToStringConvert.GetLanguageStringByKey("0041");
  2005. if (itemEmbryoMark.state == 1) stateString = KeyToStringConvert.GetLanguageStringByKey("0040");
  2006. table.Cell().Row(row).Column(headerNum1).Element(CellStyle).AlignMiddle().TextLine(stateString);
  2007. headerNum2 = 2;
  2008. foreach (var headerMark in MarkEntityList)
  2009. {
  2010. keyMark = itemEmbryoMark.embryoMark.FirstOrDefault(x => x.markKey == headerMark.markKey && x.child == 1);
  2011. if (keyMark == null)
  2012. {
  2013. columnCount = headerMark.children.Count + 1;
  2014. for (int i = 0; i < columnCount; i++)
  2015. {
  2016. table.Cell().Row(row).Column(headerNum2++).Element(CellStyle);
  2017. }
  2018. }
  2019. else
  2020. {
  2021. table.Cell().Row(row).Column(headerNum2++).Element(CellStyle).AlignMiddle().TextTime(keyMark.developTime);
  2022. foreach (var childrenMarl in headerMark.children)
  2023. {
  2024. valueMark = keyMark.children.FirstOrDefault(x => x.markKey == childrenMarl.markKey && x.child == 1);
  2025. table.Cell().Row(row).Column(headerNum2++).Element(CellStyle).AlignMiddle().Text(valueMark != null ? valueMark.children[0].markName : null);
  2026. }
  2027. }
  2028. }
  2029. row++;
  2030. }
  2031. });
  2032. });
  2033. page.Footer().AlignCenter().Text($"{KeyToStringConvert.GetLanguageStringByKey("0538")} 3 {KeyToStringConvert.GetLanguageStringByKey("0053")}").FontSize(9);
  2034. });
  2035. });
  2036. IsUpdateAi = false;
  2037. return document;
  2038. }
  2039. catch (Exception ex)
  2040. {
  2041. ExLog(ex, "GenerateReport");
  2042. AppData.Instance.MainWindow.Dispatcher.Invoke(() =>
  2043. {
  2044. //MessageBoxShow("导出AI报表错误", $"{ex.Message}");
  2045. MessageBoxShow(KeyToStringConvert.GetLanguageStringByKey("0613"), $"{ex.Message}");
  2046. });
  2047. return null;
  2048. }
  2049. }
  2050. }
  2051. public class HeaderComponent : IComponent
  2052. {
  2053. byte[] imageByte = null;
  2054. public HeaderComponent(byte[] by)
  2055. {
  2056. imageByte = by;
  2057. }
  2058. public void Compose(IContainer container)
  2059. {
  2060. //page.MarginHorizontal(2, Unit.Centimetre);
  2061. //page.MarginVertical(1.5f, Unit.Centimetre);
  2062. container.Column(col =>
  2063. {
  2064. if (imageByte != null)
  2065. {
  2066. col.Item().PaddingBottom(1.5f).AlignRight().Height(0.68f, Unit.Centimetre).Image(imageByte);
  2067. }
  2068. col.Item().LineHorizontal(0.5f).LineColor(QuestPDF.Helpers.Colors.Black);//.PaddingLeft(0.7f, Unit.Centimetre)
  2069. col.Item().PaddingTop(1.5f).AlignRight().Text(text =>
  2070. {
  2071. text.Span(KeyToStringConvert.GetLanguageStringByKey("0566")).FontSize(14);
  2072. text.Span($":{DateTime.Now.ToString("yyyy-MM-dd")}").FontSize(14);
  2073. });
  2074. });
  2075. }
  2076. }
  2077. public class HeaderComponentHeader : IComponent
  2078. {
  2079. byte[] imageByte = null;
  2080. string hosName;
  2081. public HeaderComponentHeader(byte[] by, string hosName1)
  2082. {
  2083. imageByte = by;
  2084. this.hosName = hosName1;
  2085. }
  2086. public void Compose(IContainer container)
  2087. {
  2088. container.Column(col =>
  2089. {
  2090. if (imageByte != null)
  2091. {
  2092. //col.Item().PaddingBottom(1.5f).AlignRight().Height(0.68f, Unit.Centimetre).Image(imageByte);
  2093. col.Item().Row(row =>
  2094. {
  2095. row.RelativeItem().AlignCenter().Text(hosName).FontSize(14);
  2096. row.AutoItem().PaddingBottom(1.5f).AlignRight().Height(0.68f, Unit.Centimetre).Image(imageByte);
  2097. });
  2098. }
  2099. else
  2100. {
  2101. col.Item().AlignCenter().Text(hosName).FontSize(14);
  2102. }
  2103. col.Item().LineHorizontal(0.5f).LineColor(QuestPDF.Helpers.Colors.Black);//.PaddingLeft(0.7f, Unit.Centimetre)
  2104. col.Item().PaddingTop(1.5f).AlignRight().Text(text =>
  2105. {
  2106. text.Span(KeyToStringConvert.GetLanguageStringByKey("0566")).FontSize(14);
  2107. text.Span($":{DateTime.Now.ToString("yyyy-MM-dd")}").FontSize(14);
  2108. });
  2109. });
  2110. }
  2111. }
  2112. public class HeaderComponentNew : IComponent
  2113. {
  2114. string name;
  2115. string cycle;
  2116. byte[] imageByte = null;
  2117. float NameFontsize = 11f;
  2118. string hosName;
  2119. public HeaderComponentNew(byte[] by, string name1, string cycle1, string hosName1)
  2120. {
  2121. imageByte = by;
  2122. name = name1;
  2123. cycle = cycle1;
  2124. hosName = hosName1;
  2125. }
  2126. public void Compose(IContainer container)
  2127. {
  2128. container.Column(col =>
  2129. {
  2130. if (imageByte != null)
  2131. {
  2132. //col.Item().PaddingBottom(1.5f).AlignRight().Height(0.68f, Unit.Centimetre).Image(imageByte);
  2133. col.Item().Row(row =>
  2134. {
  2135. row.RelativeItem().AlignCenter().Text(hosName).FontSize(14);
  2136. row.AutoItem().PaddingBottom(1.5f).AlignRight().Height(0.68f, Unit.Centimetre).Image(imageByte);
  2137. });
  2138. }
  2139. else
  2140. {
  2141. col.Item().AlignCenter().Text(hosName).FontSize(14);
  2142. }
  2143. col.Item().LineHorizontal(0.5f).LineColor(QuestPDF.Helpers.Colors.Black);//.PaddingLeft(0.7f, Unit.Centimetre)
  2144. col.Item().Row(row =>
  2145. {
  2146. row.AutoItem().AlignLeft().Text(text =>
  2147. {
  2148. text.Span(KeyToStringConvert.GetLanguageStringByKey("0031")).FontSize(NameFontsize);
  2149. text.Span($":{name}").FontSize(NameFontsize);
  2150. });
  2151. row.RelativeItem().AlignCenter().Text(text =>
  2152. {
  2153. text.Span(KeyToStringConvert.GetLanguageStringByKey("0151")).FontSize(NameFontsize);
  2154. text.Span($":{cycle}").FontSize(NameFontsize);
  2155. });
  2156. });
  2157. col.Item().PaddingTop(1.5f).AlignRight().Text(text =>
  2158. {
  2159. text.Span(KeyToStringConvert.GetLanguageStringByKey("0566")).FontSize(14);
  2160. text.Span($":{DateTime.Now.ToString("yyyy-MM-dd")}").FontSize(14);
  2161. });
  2162. });
  2163. }
  2164. }
  2165. public static class sdf
  2166. {
  2167. public static void LoadImage(this IContainer container, byte[] by)
  2168. {
  2169. if (by != null)
  2170. {
  2171. container.Image(by);
  2172. by = null;
  2173. }
  2174. }
  2175. public static void TextLine(this IContainer container, string Text)
  2176. {
  2177. if (string.IsNullOrEmpty(Text))
  2178. {
  2179. return;
  2180. }
  2181. container.Text(Text);
  2182. return;
  2183. container.Column(col =>
  2184. {
  2185. for (int i = 0; i < Text.Count(); i++)
  2186. {
  2187. if (i == 0)
  2188. {
  2189. col.Item().AlignCenter().Text($"{Text[i]}");
  2190. }
  2191. else
  2192. {
  2193. col.Item().AlignCenter().PaddingTop(5).Text($"{Text[i]}");
  2194. }
  2195. }
  2196. });
  2197. }
  2198. public static void TextTime(this IContainer container, int developTime)
  2199. {
  2200. container.Text($"{(developTime / 60).ToString("D2")}h{(developTime % 60).ToString("D2")}m");
  2201. return;
  2202. container.Column(col =>
  2203. {
  2204. col.Item().AlignCenter().Text($"{(developTime / 60).ToString("D2")}h");
  2205. col.Item().AlignCenter().PaddingTop(5).Text($"{(developTime % 60).ToString("D2")}m");
  2206. });
  2207. }
  2208. }
  2209. }