InvoiceDocument.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. using Model.Dto;
  2. using PLCTool.Common;
  3. using QuestPDF.Fluent;
  4. using QuestPDF.Helpers;
  5. using QuestPDF.Infrastructure;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using static System.Windows.Forms.VisualStyles.VisualStyleElement;
  12. namespace PLCTool.Pdf
  13. {
  14. public class InvoiceDocument : IDocument
  15. {
  16. static string logoPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Images", "Logo.png");
  17. public static Image LogoImage { get; } = Image.FromFile(logoPath);
  18. public InvoiceModel Model { get; }
  19. public InvoiceDocument(InvoiceModel model)
  20. {
  21. Model = model;
  22. }
  23. public DocumentMetadata GetMetadata() => DocumentMetadata.Default;
  24. public void Compose(IDocumentContainer container)
  25. {
  26. container
  27. .Page(page =>
  28. {
  29. page.Margin(50);
  30. page.Header().Element(ComposeHeader);
  31. page.Content().Element(ComposeContent);
  32. page.Footer().AlignCenter().Text(text =>
  33. {
  34. text.CurrentPageNumber();
  35. text.Span(" / ");
  36. text.TotalPages();
  37. });
  38. });
  39. }
  40. void ComposeHeader(IContainer container)
  41. {
  42. container.Row(row =>
  43. {
  44. row.RelativeItem().Column(column =>
  45. {
  46. column.Item().AlignCenter().Text($"PLC点位测试报表").FontFamily("simhei").Style(TextStyle.Default.FontSize(30));
  47. });
  48. row.ConstantItem(100).Image(LogoImage);
  49. });
  50. }
  51. void ComposeContent(IContainer container)
  52. {
  53. container.PaddingVertical(40).Column(column =>
  54. {
  55. column.Spacing(20);
  56. column.Item().Row(row =>
  57. {
  58. row.RelativeItem().Text($"测试方案名称:{Model.SchemeName}").FontFamily("simhei").Style(TextStyle.Default.FontSize(10));
  59. row.ConstantItem(50);
  60. row.RelativeItem().Text($"设备名称:{Model.DeviceName}").FontFamily("simhei").Style(TextStyle.Default.FontSize(10));
  61. });
  62. column.Item().Row(row =>
  63. {
  64. row.RelativeItem().Text($"测试人员:{Appsession.UserName}").FontFamily("simhei").Style(TextStyle.Default.FontSize(10));
  65. row.ConstantItem(50);
  66. row.RelativeItem().Text($"测试结果:{Model.FinalReuslt}").FontFamily("simhei").Style(TextStyle.Default.FontSize(10));
  67. });
  68. //表格部分
  69. column.Item().Element(ComposeTable);
  70. });
  71. }
  72. void ComposeTable(IContainer container)
  73. {
  74. var headerStyle = TextStyle.Default.SemiBold();
  75. container.Table(table =>
  76. {
  77. table.ColumnsDefinition(columns =>
  78. {
  79. columns.RelativeColumn();
  80. columns.RelativeColumn();
  81. columns.RelativeColumn();
  82. columns.RelativeColumn();
  83. columns.RelativeColumn(2);
  84. columns.RelativeColumn();
  85. columns.RelativeColumn();
  86. columns.RelativeColumn();
  87. columns.RelativeColumn();
  88. columns.RelativeColumn();
  89. columns.RelativeColumn();
  90. });
  91. table.Header(header =>
  92. {
  93. header.Cell().Text("测试项名称").FontFamily("simhei").Style(TextStyle.Default.FontSize(10));
  94. header.Cell().Text("类型").FontFamily("simhei").Style(TextStyle.Default.FontSize(10));
  95. header.Cell().Text("测试项类型").FontFamily("simhei").Style(TextStyle.Default.FontSize(10));
  96. header.Cell().AlignCenter().Text("明细判定逻辑").FontFamily("simhei").Style(TextStyle.Default.FontSize(10));
  97. header.Cell().AlignCenter().Text("描述").FontFamily("simhei").Style(TextStyle.Default.FontSize(10));
  98. header.Cell().AlignCenter().Text("PLC地址").FontFamily("simhei").Style(TextStyle.Default.FontSize(10));
  99. header.Cell().AlignCenter().Text("PLC变量名").FontFamily("simhei").Style(TextStyle.Default.FontSize(10));
  100. header.Cell().AlignCenter().Text("判定值").FontFamily("simhei").Style(TextStyle.Default.FontSize(10));
  101. header.Cell().AlignCenter().Text("实际值").FontFamily("simhei").Style(TextStyle.Default.FontSize(10));
  102. header.Cell().AlignCenter().Text("结果").FontFamily("simhei").Style(TextStyle.Default.FontSize(10));
  103. header.Cell().AlignCenter().Text("测试时间").FontFamily("simhei").Style(TextStyle.Default.FontSize(10));
  104. //标题画一条黑线
  105. header.Cell().ColumnSpan(11).PaddingTop(5).BorderBottom(1).BorderColor(Colors.Black);
  106. });
  107. foreach (var item in Model.ReportPLCModels)
  108. {
  109. var index = Model.ReportPLCModels.IndexOf(item) + 1;
  110. //table.Cell().Element(CellStyle).Text($"{index}");
  111. table.Cell().Element(CellStyle).AlignCenter().Text(item.ItemName).FontFamily("simhei").Style(TextStyle.Default.FontSize(8)); ;
  112. table.Cell().Element(CellStyle).AlignCenter().Text(item.Type).FontFamily("simhei").Style(TextStyle.Default.FontSize(8)); ;
  113. table.Cell().Element(CellStyle).AlignCenter().Text($"{item.JudgeType}").FontFamily("simhei").Style(TextStyle.Default.FontSize(8)); ;
  114. table.Cell().Element(CellStyle).AlignCenter().Text($"{item.SelectLogic}").FontFamily("simhei").Style(TextStyle.Default.FontSize(8)); ;
  115. table.Cell().Element(CellStyle).AlignCenter().Text($"{item.Detail}").FontFamily("simhei").Style(TextStyle.Default.FontSize(8)); ;
  116. table.Cell().Element(CellStyle).AlignCenter().Text($"{item.PlcAddress}").FontFamily("simhei").Style(TextStyle.Default.FontSize(8)); ;
  117. table.Cell().Element(CellStyle).AlignCenter().Text($"{item.PlcItem}").FontFamily("simhei").Style(TextStyle.Default.FontSize(8)); ;
  118. table.Cell().Element(CellStyle).AlignCenter().Text($"{item.PlcValue}").FontFamily("simhei").Style(TextStyle.Default.FontSize(8)); ;
  119. table.Cell().Element(CellStyle).AlignCenter().Text($"{item.RealValue}").FontFamily("simhei").Style(TextStyle.Default.FontSize(8)); ;
  120. table.Cell().Element(CellStyle).AlignCenter().Text($"{item.TestResult}").FontFamily("simhei").Style(TextStyle.Default.FontSize(8)); ;
  121. table.Cell().Element(CellStyle).AlignCenter().Text($"{item.TestTime}").FontFamily("simhei").Style(TextStyle.Default.FontSize(8)); ;
  122. //static IContainer CellStyle(IContainer container)
  123. //{
  124. // return container.BorderBottom(1).PaddingVertical(4);
  125. //}
  126. static IContainer CellStyle(IContainer container) => container.BorderBottom(1).BorderColor(Colors.Grey.Lighten2).PaddingVertical(5);
  127. }
  128. });
  129. }
  130. }
  131. }