278 lines
12 KiB
C#
278 lines
12 KiB
C#
using QuestPDF.Fluent;
|
|
using QuestPDF.Infrastructure;
|
|
using QuestPDF.Helpers;
|
|
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
|
|
|
public class TarBallPDF : IDocument
|
|
{
|
|
public DocumentMetadata GetMetadata() => new DocumentMetadata
|
|
{
|
|
Title = "TarBall Sampling Form",
|
|
Author = "PAKAR SCIENO TW Integrated Environmental Solutions",
|
|
Subject = "Environmental Survey and Observations"
|
|
};
|
|
|
|
public void Compose(IDocumentContainer container)
|
|
{
|
|
container.Page(page =>
|
|
{
|
|
// Page Setup
|
|
page.Size(PageSizes.A4);
|
|
page.Margin(1.1f, Unit.Centimetre);
|
|
page.DefaultTextStyle(x => x.FontFamily("Arial").FontSize(10));
|
|
|
|
// Header Section
|
|
page.Header().Row(row =>
|
|
{
|
|
row.RelativeItem(1).Element(CellStyle).Column(column =>
|
|
{
|
|
column.Item()
|
|
.AlignMiddle() // Ensures vertical centering
|
|
.AlignCenter() // Ensures horizontal centering
|
|
.Text("Logo Placeholder"); // Placeholder for the logo
|
|
});
|
|
|
|
row.RelativeItem(1).Element(CellStyle)
|
|
.AlignMiddle() // Ensures vertical centering
|
|
.AlignCenter() // Ensures horizontal centering
|
|
.Text("TARBALL SAMPLING FORM")
|
|
.FontSize(16)
|
|
.FontColor("#4B0082");
|
|
|
|
row.RelativeItem(1).Column(column =>
|
|
{
|
|
column.Spacing(0); // Adds consistent spacing between rows
|
|
|
|
// Document Row
|
|
column.Item().Row(innerRow =>
|
|
{
|
|
innerRow.RelativeItem(1).Element(CellStyle).Text("Document:")
|
|
.AlignLeft();
|
|
innerRow.RelativeItem(1).Element(CellStyle).Text("F-MM06")
|
|
.AlignLeft().Bold();
|
|
});
|
|
column.Item().Row(innerRow =>
|
|
{
|
|
innerRow.RelativeItem(1).Element(CellStyle).Text("Effective Date:")
|
|
.AlignLeft();
|
|
innerRow.RelativeItem(1).Element(CellStyle).Text("1 April 2025")
|
|
.AlignLeft();
|
|
});
|
|
column.Item().Row(innerRow =>
|
|
{
|
|
innerRow.RelativeItem(1).Element(CellStyle).Text("Revision No.")
|
|
.AlignLeft();
|
|
innerRow.RelativeItem(1).Element(CellStyle).Text("02")
|
|
.AlignLeft();
|
|
});
|
|
|
|
});
|
|
|
|
// Define styles
|
|
static IContainer CellStyle(IContainer container)
|
|
=> container.Border(0.5f).Padding(5); // Retains padding for text
|
|
});
|
|
|
|
// Content Section
|
|
page.Content().Column(column =>
|
|
{
|
|
// Observations Table
|
|
column.Item().Element(container =>
|
|
{
|
|
container
|
|
.PaddingTop(20) // Adds space above the text
|
|
.PaddingBottom(10)
|
|
.Text("Please be informed that we have observed the following conditions:");
|
|
});
|
|
column.Item().Table(table =>
|
|
{
|
|
column.Spacing(0);
|
|
|
|
table.ColumnsDefinition(columns =>
|
|
{
|
|
columns.RelativeColumn(3); // Label/Header column
|
|
columns.RelativeColumn(3); // Data Entry column
|
|
});
|
|
|
|
// Table Rows
|
|
table.Cell()
|
|
.Background(Colors.Grey.Lighten2).Element(CellStyle).Text("STATE")
|
|
.Bold();
|
|
table.Cell().Element(CellStyle).Text(""); // Empty cell for data entry
|
|
|
|
table.Cell()
|
|
.Background(Colors.Grey.Lighten2).Element(CellStyle).Text("STATION ID")
|
|
.Bold();
|
|
table.Cell().Element(CellStyle).Text(""); // Empty cell for data entry
|
|
|
|
table.Cell()
|
|
.Background(Colors.Grey.Lighten2).Element(CellStyle).Text("LOCATION")
|
|
.Bold();
|
|
table.Cell().Element(CellStyle).Text(""); // Empty cell for data entry
|
|
|
|
table.Cell()
|
|
.Background(Colors.Grey.Lighten2).Element(CellStyle).Text("TARBALL SURVEY LOCATION LONGITUDE & LATITUDE")
|
|
.Bold();
|
|
table.Cell().Element(CellStyle).Text(""); // Empty cell for data entry
|
|
|
|
table.Cell()
|
|
.Background(Colors.Grey.Lighten2).Element(CellStyle).Text("DATE / TIME")
|
|
.Bold();
|
|
table.Cell().Element(CellStyle).Text(""); // Empty cell for data entry
|
|
});
|
|
|
|
column.Spacing(3);
|
|
|
|
// Survey Findings
|
|
column.Item()
|
|
.PaddingTop(10) // Adds space above the text
|
|
.PaddingBottom(10)
|
|
.Text("SURVEY FINDING:")
|
|
.Bold().FontSize(12);
|
|
column.Item()
|
|
.PaddingBottom(10)
|
|
.Text("Tar Ball: [☐] YES [☐] NO").FontSize(10);
|
|
column.Item()
|
|
.PaddingBottom(10)
|
|
.Text("If YES, Tar Ball falls under the classification of:").FontSize(10);
|
|
column.Item()
|
|
.PaddingBottom(10)
|
|
.Text("[☐] Sand [☐] Non-sandy [☐] Coquina").FontSize(10);
|
|
column.Item()
|
|
.PaddingBottom(10)
|
|
.Text("*tick wherever applicable");
|
|
|
|
// Photos Section Title
|
|
column.Item()
|
|
.PaddingBottom(5)
|
|
.Text("PHOTOGRAPHS OF SAMPLING")
|
|
.AlignCenter() // Ensures horizontal centering
|
|
.Bold()
|
|
.FontSize(14);
|
|
|
|
// Table for Photos with Existing Heights
|
|
column.Item().Table(table =>
|
|
{
|
|
column.Spacing(0); // No extra spacing between rows
|
|
|
|
table.ColumnsDefinition(columns =>
|
|
{
|
|
columns.RelativeColumn(1); // First column
|
|
columns.RelativeColumn(1); // Second column
|
|
});
|
|
|
|
// For pictures
|
|
table.Cell().Element(CellStyle).Height(150);
|
|
table.Cell().Element(CellStyle).Height(150);
|
|
|
|
table.Cell().Element(CellStyle).Text("Figure 1: Left Side Coastal View").FontSize(12).AlignLeft();
|
|
table.Cell().Element(CellStyle).Text("Figure 2: Right Side Coastal View").FontSize(12).AlignLeft();
|
|
|
|
table.Cell().Element(CellStyle).Height(150);
|
|
table.Cell().Element(CellStyle).Height(150);
|
|
|
|
table.Cell().Element(CellStyle).Text("Figure 3: Drawing Vertical Lines").FontSize(12).AlignLeft();
|
|
table.Cell().Element(CellStyle).Text("Figure 4: Drawing Horizontal Lines (Racking)").FontSize(12).AlignLeft();
|
|
});
|
|
|
|
// Page Break
|
|
column.Item().PageBreak();
|
|
|
|
// Additional Photos Section
|
|
column.Item()
|
|
.PaddingBottom(5)
|
|
.AlignCenter(); // Ensures horizontal centering
|
|
|
|
// Table for Additional Photos
|
|
column.Item().Table(table =>
|
|
{
|
|
column.Spacing(0); // No extra spacing between rows
|
|
|
|
table.ColumnsDefinition(columns =>
|
|
{
|
|
columns.RelativeColumn(1); // First column
|
|
columns.RelativeColumn(1); // Second column
|
|
});
|
|
|
|
// Row 1: Empty spaces for pictures
|
|
table.Cell().Element(CellStyle).Height(150);
|
|
table.Cell().Element(CellStyle).Height(150);
|
|
|
|
// Row 2: Labels for the pictures
|
|
table.Cell().Element(CellStyle).Text("Figure 5:").FontSize(12).AlignLeft();
|
|
table.Cell().Element(CellStyle).Text("Figure 6:").FontSize(12).AlignLeft();
|
|
|
|
// Row 3: Empty spaces for pictures
|
|
table.Cell().Element(CellStyle).Height(150);
|
|
table.Cell().Element(CellStyle).Height(150);
|
|
|
|
// Row 4: Labels for the pictures
|
|
table.Cell().Element(CellStyle).Text("Figure 7:").FontSize(12).AlignLeft();
|
|
table.Cell().Element(CellStyle).Text("Figure 8:").FontSize(12).AlignLeft();
|
|
});
|
|
|
|
// Note Section
|
|
column.Item()
|
|
.PaddingTop(10)
|
|
.PaddingBottom(20)
|
|
.Text("* If there are any event observe at the current station it is compulsory to add optional photo with description (figure 5 to figure 8)")
|
|
.FontSize(10)
|
|
.AlignLeft();
|
|
|
|
// Signature Section
|
|
column.Item().Table(table =>
|
|
{
|
|
//define how many columns the table has
|
|
table.ColumnsDefinition(columns =>
|
|
{
|
|
columns.RelativeColumn(2); // Label column
|
|
columns.RelativeColumn(1); // Signature column
|
|
columns.RelativeColumn(2); //empty
|
|
columns.RelativeColumn(1); // Date column
|
|
columns.RelativeColumn(1); //empty
|
|
});
|
|
|
|
// Signature Rows
|
|
table.Cell().RowSpan(2).Element(CellStyle).Text("REPORTED BY :").Bold().FontSize(12);
|
|
table.Cell().Element(CellStyle).Text("Signature").FontSize(12);
|
|
table.Cell().Element(CellStyle).Text("").FontSize(12);
|
|
table.Cell().Element(CellStyle).Text("Date").FontSize(12);
|
|
table.Cell().Element(CellStyle).Text("").FontSize(12);
|
|
|
|
table.Cell().Element(CellStyle).Text("Designation").FontSize(12);
|
|
table.Cell().ColumnSpan(3).Element(CellStyle).Text("").FontSize(12);
|
|
|
|
table.Cell().RowSpan(2).Element(CellStyle).Text("CHECKED BY :").Bold().FontSize(12);
|
|
table.Cell().Element(CellStyle).Text("Signature").FontSize(12);
|
|
table.Cell().Element(CellStyle).Text("").FontSize(12);
|
|
table.Cell().Element(CellStyle).Text("Date").FontSize(12);
|
|
table.Cell().Element(CellStyle).Text("").FontSize(12);
|
|
|
|
table.Cell().Element(CellStyle).Text("Designation").FontSize(12);
|
|
table.Cell().ColumnSpan(3).Element(CellStyle).Text("").FontSize(12);
|
|
|
|
table.Cell().RowSpan(2).Element(CellStyle).Text("VERIFIED BY :").Bold().FontSize(12);
|
|
table.Cell().Element(CellStyle).Text("Signature").FontSize(12);
|
|
table.Cell().Element(CellStyle).Text("").FontSize(12);
|
|
table.Cell().Element(CellStyle).Text("Date").FontSize(12);
|
|
table.Cell().Element(CellStyle).Text("").FontSize(12);
|
|
|
|
table.Cell().Element(CellStyle).Text("Designation").FontSize(12);
|
|
table.Cell().ColumnSpan(3).Element(CellStyle).Text("").FontSize(12);
|
|
});
|
|
});
|
|
|
|
// Footer Section
|
|
page.Footer().AlignCenter().Text(text =>
|
|
{
|
|
text.Span("Page ");
|
|
text.CurrentPageNumber();
|
|
text.Span(" of ");
|
|
text.TotalPages();
|
|
});
|
|
static IContainer CellStyle(IContainer container) => container.Border(0.5f)
|
|
.Padding(5);
|
|
});
|
|
}
|
|
}
|