287 lines
9.6 KiB
C#
287 lines
9.6 KiB
C#
using System.Globalization;
|
|
using System.Linq;
|
|
using QuestPDF.Drawing;
|
|
using QuestPDF.Fluent;
|
|
using QuestPDF.Helpers;
|
|
using QuestPDF.Infrastructure;
|
|
|
|
namespace BenchtopPDF
|
|
{
|
|
public class SheetDocument : IDocument
|
|
{
|
|
private static Image LogoImage { get; } = Image.FromFile("BenchTopLogo.png");
|
|
private static Image CertImage { get; } = Image.FromFile("a2lp_cert.png");
|
|
|
|
public Sheet Sheet { get; }
|
|
|
|
public SheetDocument(Sheet model)
|
|
{
|
|
Sheet = model;
|
|
}
|
|
|
|
public DocumentMetadata GetMetadata() => DocumentMetadata.Default;
|
|
public DocumentSettings GetSettings()
|
|
{
|
|
return new DocumentSettings();
|
|
}
|
|
|
|
public void Compose(IDocumentContainer container)
|
|
{
|
|
container.Page(page =>
|
|
{
|
|
page.Margin(25);
|
|
|
|
page.Header().Element(CustomHeader);
|
|
page.Content().Element(ComposeContent);
|
|
|
|
page.Footer().Border(1).Padding(4).AlignLeft().Text(text =>
|
|
{
|
|
text.Span("Secondary Cal Device (For Environmental Data):\n\nUncertainty Statement: The accuracy of measurement is determined by the standards uncertainty, with a coverage factor of k=2 (confidence of roughly 95%).");
|
|
});
|
|
});
|
|
}
|
|
|
|
void CustomHeader(IContainer container)
|
|
{
|
|
container.Row(row =>
|
|
{
|
|
|
|
row.ConstantItem(133).Image(LogoImage);
|
|
row.RelativeItem().Stack(stack =>
|
|
{
|
|
stack.Item().PaddingHorizontal(10).Column(column =>
|
|
{
|
|
column.Item().Text(text =>
|
|
{
|
|
text.Span("Customer:").FontSize(12);
|
|
});
|
|
column.Item().Text(text =>
|
|
{
|
|
text.Span("Onsite cal (yes/no):").FontSize(12);
|
|
});
|
|
column.Item().Text(text =>
|
|
{
|
|
text.Span("Control Doc#:").FontSize(12);
|
|
});
|
|
column.Item().Text(text =>
|
|
{
|
|
text.Span("Technician:").FontSize(12);
|
|
// text.Span($"{Sheet.IssueDate:d}");
|
|
});
|
|
});
|
|
});
|
|
row.ConstantItem(80).Image(CertImage);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
void ComposeContent(IContainer container)
|
|
{
|
|
container.PaddingVertical(0).Column(column =>
|
|
{
|
|
column.Item().Text(text =>
|
|
{
|
|
text.Span("Calibration")
|
|
.FontSize(16)
|
|
.Bold()
|
|
.FontColor(Colors.Black);
|
|
text.AlignCenter();
|
|
|
|
});
|
|
column.Spacing(20);
|
|
|
|
column.Item().Row(row =>
|
|
{
|
|
row.RelativeItem().Component(new InstrumentComponent());
|
|
row.ConstantItem(25);
|
|
row.RelativeItem().Component(new CalDeviceComponent());
|
|
row.ConstantItem(25);
|
|
row.RelativeItem().Component(new EnvironmentComponent());
|
|
});
|
|
|
|
foreach (var transducer in Sheet.Transducers) {
|
|
column.Item().Component(new TableComponent(transducer));
|
|
}
|
|
});
|
|
}
|
|
|
|
void ComposeTable(IContainer container)
|
|
{
|
|
|
|
}
|
|
|
|
void ComposeComments(IContainer container)
|
|
{
|
|
container.ShowEntire().Background(Colors.Grey.Lighten3).Padding(10).Column(column =>
|
|
{
|
|
column.Spacing(5);
|
|
column.Item().Text("Comments").FontSize(14).SemiBold();
|
|
// column.Item().Text(Sheet.Comments);
|
|
});
|
|
}
|
|
}
|
|
|
|
public class InstrumentComponent : IComponent
|
|
{
|
|
|
|
public InstrumentComponent()
|
|
{
|
|
}
|
|
|
|
public void Compose(IContainer container)
|
|
{
|
|
container.ShowEntire().Column(column =>
|
|
{
|
|
column.Spacing(2);
|
|
column.Item().Text("Instrument").Underline();
|
|
column.Item().Text("Model: ");
|
|
column.Item().Text("Serial #:");
|
|
column.Item().Text("Channel:");
|
|
column.Item().Text("Transducer Model:");
|
|
column.Item().Text("Transducer Span:");
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public class CalDeviceComponent : IComponent
|
|
{
|
|
|
|
public CalDeviceComponent()
|
|
{
|
|
}
|
|
|
|
public void Compose(IContainer container)
|
|
{
|
|
container.ShowEntire().Column(column =>
|
|
{
|
|
column.Spacing(2);
|
|
column.Item().Text("Primary Cal Device:").Underline();
|
|
column.Item().Text("Model:");
|
|
column.Item().Text("Serial #:");
|
|
column.Item().Text("Cal Date:");
|
|
column.Item().Text("Cal Due Date:");
|
|
column.Item().Text("Cert ID:");
|
|
column.Item().PaddingBottom(5);
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
public class EnvironmentComponent : IComponent
|
|
{
|
|
|
|
public void Compose(IContainer container)
|
|
{
|
|
container.ShowEntire().Column(column =>
|
|
{
|
|
column.Spacing(2);
|
|
|
|
column.Item().Text("Cal Date:").Bold();
|
|
column.Item().Text("Cal Due Date:").Bold();
|
|
column.Item().Text("Environmental Data").Underline();
|
|
column.Item().Text("Baro (Psi):");
|
|
column.Item().Text("Temp (*F):");
|
|
column.Item().Text("Humidity (%RF)");
|
|
column.Item().PaddingBottom(5);
|
|
});
|
|
}
|
|
}
|
|
|
|
public class TableComponent : IComponent
|
|
{
|
|
private Transducer t { get; }
|
|
|
|
public TableComponent(Transducer tt)
|
|
{
|
|
t = tt;
|
|
}
|
|
|
|
public void Compose(IContainer container)
|
|
{
|
|
var headerStyle = TextStyle.Default.SemiBold();
|
|
container
|
|
.DefaultTextStyle(x => x.FontSize(10))
|
|
.Border(1)
|
|
.BorderColor(Colors.Grey.Lighten2)
|
|
.Table(table =>
|
|
{
|
|
table.ColumnsDefinition(columns =>
|
|
{
|
|
columns.RelativeColumn();
|
|
columns.RelativeColumn();
|
|
columns.RelativeColumn();
|
|
columns.RelativeColumn();
|
|
columns.RelativeColumn();
|
|
columns.RelativeColumn();
|
|
});
|
|
|
|
table.Header(header =>
|
|
{
|
|
// header.Cell().ColumnSpan(6).PaddingBottom(0).BorderBottom(1)
|
|
// .BorderColor(Colors.Black).AlignCenter().Text($"Data (IN {t.Unit})");
|
|
|
|
header.Cell().AlignCenter().Text("Gauge Reading").Style(headerStyle);
|
|
header.Cell().AlignRight().Text("Accuracy (\u00b1 FS)").Style(headerStyle);
|
|
header.Cell().AlignRight().Text("Low Limit").Style(headerStyle);
|
|
header.Cell().AlignRight().Text("High Limit").Style(headerStyle);
|
|
header.Cell().AlignRight().Text("As Found (units)").Style(headerStyle);
|
|
header.Cell().AlignRight().Text("OOT").Style(headerStyle);
|
|
|
|
});
|
|
|
|
for (var idx = 0; idx < t.GaugeReading.Count; idx++)
|
|
{
|
|
var i = t.GaugeReading[idx];
|
|
var index = t.GaugeReading.IndexOf(i) + 1;
|
|
var masterValue = t.MasterValue[t.GaugeReading.IndexOf(i)];
|
|
var darken = (idx % 2 == 0);
|
|
MakeRow(table, index, masterValue, i.Value, i.Delta, darken);
|
|
}
|
|
});
|
|
}
|
|
|
|
private void MakeRow(TableDescriptor table, int index, MasterValue masterValue, int value, int delta, bool darken)
|
|
{
|
|
IContainer CellStyle(IContainer container)
|
|
{
|
|
if (darken)
|
|
{
|
|
return container
|
|
.DefaultTextStyle(x => x.FontSize(8))
|
|
.Border(1)
|
|
.BorderColor(Colors.Grey.Lighten2)
|
|
.Background(Colors.Grey.Lighten3)
|
|
.Padding(2);
|
|
}
|
|
return container
|
|
.DefaultTextStyle(x => x.FontSize(8))
|
|
.Border(1)
|
|
.BorderColor(Colors.Grey.Lighten2)
|
|
.Padding(2);
|
|
}
|
|
|
|
/*
|
|
* "Gauge Reading"
|
|
* "Accuracy"
|
|
* "Low Limit"
|
|
* "High Limit"
|
|
* "As Found"
|
|
* "OOT"
|
|
*/
|
|
|
|
table.Cell().Element(CellStyle).AlignRight().Text($"{masterValue.Value / 1000.0:F3}");
|
|
table.Cell().Element(CellStyle).AlignRight().Text("---");
|
|
table.Cell().Element(CellStyle).AlignRight().Text($"{masterValue.LowLimit / 1000.0:F3}");
|
|
table.Cell().Element(CellStyle).AlignRight().Text($"{masterValue.HighLimit / 1000.0:F3}");
|
|
table.Cell().Element(CellStyle).AlignRight().Text($"{value / 1000.0:F3}");
|
|
table.Cell().Element(CellStyle).AlignRight().Text($"{delta / 1000.0:F3}");
|
|
}
|
|
|
|
|
|
}
|
|
} |