[feat:] initial version of DP-compatible running sheets (germany)
This commit is contained in:
+224
-52
@@ -522,77 +522,249 @@ public class PdfBuilder
|
||||
document.Info.Subject = "powered by logofclient";
|
||||
document.Info.Author = "logofclient";
|
||||
|
||||
int margin = 50;
|
||||
var grouped_nums = GroupAddresses(setID).ToList();
|
||||
|
||||
var grouped_nums = GroupAddresses(setID);
|
||||
// Zwei Tabellen pro A4-Seite
|
||||
int sheets = (grouped_nums.Count + 1) / 2;
|
||||
|
||||
foreach (var result in grouped_nums)
|
||||
// Layout
|
||||
double marginX = 20;
|
||||
double marginY = 20;
|
||||
double gapY = 12;
|
||||
|
||||
for (int pageIndex = 0; pageIndex < sheets; pageIndex++)
|
||||
{
|
||||
var page = document.AddPage();
|
||||
page.Size = PageSize.A4;
|
||||
|
||||
var gfx = XGraphics.FromPdfPage(page);
|
||||
|
||||
var width = page.Width.Point-margin;
|
||||
var height = page.Height.Point-margin;
|
||||
gfx.DrawLine(XPens.Black, margin, margin, margin, height);
|
||||
gfx.DrawLine(XPens.Black, margin, margin, width, margin);
|
||||
gfx.DrawLine(XPens.Black, width, margin, width, height);
|
||||
gfx.DrawLine(XPens.Black, margin, height, width, height);
|
||||
double pageW = page.Width.Point;
|
||||
double pageH = page.Height.Point;
|
||||
|
||||
var boldfont = new XFont("Cantarell", 11, XFontStyleEx.Bold);
|
||||
var font = new XFont("Cantarell", 11, XFontStyleEx.Regular);
|
||||
var bigboldfont = new XFont("Cantarell", 35, XFontStyleEx.Bold);
|
||||
double usableW = pageW - 2 * marginX;
|
||||
double usableH = pageH - 2 * marginY;
|
||||
double tableH = (usableH - gapY) / 2.0;
|
||||
|
||||
// Versandinfo
|
||||
gfx.DrawString($"Versand {list.Name}", boldfont, XBrushes.Black,
|
||||
new XRect(margin+5, margin, width-margin, 25), XStringFormats.CenterLeft);
|
||||
gfx.DrawString($"Start: ", font, XBrushes.Black,
|
||||
new XRect(margin+5, margin+25, width-margin, 25), XStringFormats.CenterLeft);
|
||||
gfx.DrawString($"{result.Item3}", font, XBrushes.Black,
|
||||
new XRect(margin+75, margin+25, width-margin, 25), XStringFormats.CenterLeft);
|
||||
gfx.DrawString($"Ende: ", font, XBrushes.Black,
|
||||
new XRect(margin+5, margin+40, width-margin, 25), XStringFormats.CenterLeft);
|
||||
gfx.DrawString($"{result.Item4}", font, XBrushes.Black,
|
||||
new XRect(margin+75, margin+40, width-margin, 25), XStringFormats.CenterLeft);
|
||||
gfx.DrawString($"Kunde: ", font, XBrushes.Black,
|
||||
new XRect(margin+5, margin+55, width-margin, 25), XStringFormats.CenterLeft);
|
||||
gfx.DrawString($"{Customer.GetCustomerByID(list.owner_id).name}", font, XBrushes.Black,
|
||||
new XRect(margin+75, margin+55, width-margin, 25), XStringFormats.CenterLeft);
|
||||
gfx.DrawString($"Absender: ", font, XBrushes.Black,
|
||||
new XRect(margin+5, margin+70, width-margin, 25), XStringFormats.CenterLeft);
|
||||
gfx.DrawString($"{Customer.GetCustomerByID(list.owner_id).sender_address}", font, XBrushes.Black,
|
||||
new XRect(margin+75, margin+70, width-margin, 25), XStringFormats.CenterLeft);
|
||||
gfx.DrawString($"Anzahl: ", font, XBrushes.Black,
|
||||
new XRect(margin+5, margin+85, width-margin, 25), XStringFormats.CenterLeft);
|
||||
gfx.DrawString($"{result.Item5}", font, XBrushes.Black,
|
||||
new XRect(margin+75, margin+85, width-margin, 25), XStringFormats.CenterLeft);
|
||||
double top1 = marginY;
|
||||
double top2 = marginY + tableH + gapY;
|
||||
|
||||
// logofclient ad
|
||||
gfx.DrawString($"powered by logofclient", font, XBrushes.Black,
|
||||
new XRect(margin+5, height-55, width-margin, 25), XStringFormats.CenterLeft);
|
||||
gfx.DrawString($"(c) 2026 MyPapertown", font, XBrushes.Black,
|
||||
new XRect(margin+5, height-40, width-margin, 25), XStringFormats.CenterLeft);
|
||||
gfx.DrawString($"mypapercloud.de/logof", font, XBrushes.Black,
|
||||
new XRect(margin+5, height-25, width-margin, 25), XStringFormats.CenterLeft);
|
||||
var fontLabel = new XFont("Arial", 6, XFontStyleEx.Bold);
|
||||
var fontText = new XFont("Arial", 6, XFontStyleEx.Regular);
|
||||
var fontBig = new XFont("Arial", 30, XFontStyleEx.Bold);
|
||||
|
||||
int firstIndex = pageIndex * 2;
|
||||
DrawGermanyRunningSheet(
|
||||
gfx,
|
||||
marginX,
|
||||
top1,
|
||||
usableW,
|
||||
tableH,
|
||||
list,
|
||||
grouped_nums[firstIndex],
|
||||
grouped_nums,
|
||||
fontLabel,
|
||||
fontText,
|
||||
fontBig
|
||||
);
|
||||
|
||||
int total_frac = 0;
|
||||
foreach (var item in grouped_nums)
|
||||
if (firstIndex + 1 < grouped_nums.Count)
|
||||
{
|
||||
if (item.Item2 == result.Item2) total_frac++;
|
||||
DrawGermanyRunningSheet(
|
||||
gfx,
|
||||
marginX,
|
||||
top2,
|
||||
usableW,
|
||||
tableH,
|
||||
list,
|
||||
grouped_nums[firstIndex + 1],
|
||||
grouped_nums,
|
||||
fontLabel,
|
||||
fontText,
|
||||
fontBig
|
||||
);
|
||||
}
|
||||
|
||||
// group number
|
||||
gfx.DrawString($"{result.Item2}", bigboldfont, XBrushes.Black,
|
||||
new XRect(margin, margin, width-margin, (height-margin)/2), XStringFormats.Center);
|
||||
gfx.DrawString($"Fraktion {result.Item1}/{total_frac}", font, XBrushes.Black,
|
||||
new XRect(margin, margin, width-margin, (height-margin)/2 + 50), XStringFormats.Center);
|
||||
}
|
||||
|
||||
document.Save(path);
|
||||
}
|
||||
|
||||
private void DrawGermanyRunningSheet(
|
||||
XGraphics gfx,
|
||||
double x,
|
||||
double y,
|
||||
double w,
|
||||
double h,
|
||||
KasAddressList list,
|
||||
dynamic result,
|
||||
List<(int,string,string,string,int)> grouped_nums,
|
||||
XFont fontLabel,
|
||||
XFont fontText,
|
||||
XFont fontBig)
|
||||
{
|
||||
double line = 1.0;
|
||||
|
||||
string sender = Customer.GetCustomerByID(list.owner_id)?.sender_address ?? "[Absender]";
|
||||
string customerName = Customer.GetCustomerByID(list.owner_id)?.name ?? "[Kunde]";
|
||||
string start = result.Item3?.ToString() ?? "[Start]";
|
||||
string end = result.Item4?.ToString() ?? "[Ende]";
|
||||
string amount = result.Item5?.ToString() ?? "[Anzahl]";
|
||||
string groupNo = result.Item2?.ToString() ?? "[PLZ]";
|
||||
string fraction = result.Item1?.ToString() ?? "[Fraktion]";
|
||||
|
||||
int total_frac = 0;
|
||||
foreach (var item in grouped_nums)
|
||||
{
|
||||
if (item.Item2 == result.Item2) total_frac++;
|
||||
}
|
||||
|
||||
// Outer border
|
||||
gfx.DrawRectangle(XPens.Black, x, y, w, h);
|
||||
|
||||
// Row heights
|
||||
double r1 = h * 0.1;
|
||||
double r2 = h * 0.1;
|
||||
double r3 = h * 0.54;
|
||||
double r4 = h * 0.30;
|
||||
|
||||
// Main horizontal lines
|
||||
gfx.DrawLine(XPens.Black, x, y + r1, x + w, y + r1);
|
||||
gfx.DrawLine(XPens.Black, x, y + r1 + r2, x + w, y + r1 + r2);
|
||||
gfx.DrawLine(XPens.Black, x, y + r1 + r2 + r3, x + w, y + r1 + r2 + r3);
|
||||
|
||||
// Top row columns
|
||||
double c1 = w * 0.39;
|
||||
double c2 = w * 0.20;
|
||||
double c3 = w * 0.26;
|
||||
double c4 = w * 0.15;
|
||||
|
||||
gfx.DrawLine(XPens.Black, x + c1, y, x + c1, y + r1);
|
||||
gfx.DrawLine(XPens.Black, x + c1 + c2, y, x + c1 + c2, y + r1);
|
||||
gfx.DrawLine(XPens.Black, x + c1 + c2 + c3, y, x + c1 + c2 + c3, y + r1);
|
||||
|
||||
// Second row columns
|
||||
gfx.DrawLine(XPens.Black, x + c1, y + r1, x + c1, y + r1 + r2);
|
||||
gfx.DrawLine(XPens.Black, x + c1 + c2, y + r1, x + c1 + c2, y + r1 + r2);
|
||||
gfx.DrawLine(XPens.Black, x + c1 + c2 + c3, y + r1, x + c1 + c2 + c3, y + r1 + r2);
|
||||
|
||||
// Middle large area split
|
||||
double midSplit = x + w * 0.55;
|
||||
gfx.DrawLine(XPens.Black, midSplit, y + r1 + r2, midSplit, y + r1 + r2 + r3);
|
||||
|
||||
// Bottom section split
|
||||
double leftBottomW = w * 0.42;
|
||||
gfx.DrawLine(XPens.Black, x + leftBottomW, y + r1 + r2 + r3, x + leftBottomW, y + h);
|
||||
|
||||
// Bottom left rows
|
||||
double blY1 = y + r1 + r2 + r3 + (r4 * 0.14);
|
||||
double blY2 = y + r1 + r2 + r3 + (r4 * 0.28);
|
||||
double blY3 = y + r1 + r2 + r3 + (r4 * 0.42);
|
||||
double blY4 = y + r1 + r2 + r3 + (r4 * 0.56);
|
||||
double blY5 = y + r1 + r2 + r3 + (r4 * 0.70);
|
||||
|
||||
gfx.DrawLine(XPens.Black, x, blY1, x + leftBottomW, blY1);
|
||||
gfx.DrawLine(XPens.Black, x, blY2, x + leftBottomW, blY2);
|
||||
gfx.DrawLine(XPens.Black, x, blY3, x + leftBottomW, blY3);
|
||||
gfx.DrawLine(XPens.Black, x, blY4, x + leftBottomW, blY4);
|
||||
gfx.DrawLine(XPens.Black, x, blY5, x + leftBottomW, blY5);
|
||||
|
||||
// Labels top row
|
||||
gfx.DrawString("Absender:", fontLabel, XBrushes.Black, new XRect(x + 5, y + 4, c1 - 10, 14), XStringFormats.TopLeft);
|
||||
gfx.DrawString("Kunden-Nr. Absender:", fontLabel, XBrushes.Black, new XRect(x + c1 + 5, y + 4, c2 - 10, 14), XStringFormats.TopLeft);
|
||||
gfx.DrawString("ZKZ/Titel:", fontLabel, XBrushes.Black, new XRect(x + c1 + c2 + 5, y + 4, c3 - 10, 14), XStringFormats.TopLeft);
|
||||
gfx.DrawString("Anzahl Sendungen:", fontLabel, XBrushes.Black, new XRect(x + c1 + c2 + c3 + 5, y + 4, c4 - 10, 14), XStringFormats.TopLeft);
|
||||
|
||||
// Values top row
|
||||
gfx.DrawString(sender, fontText, XBrushes.Black, new XRect(x + 5, y + 20, c1 - 10, r1 - 22), XStringFormats.TopLeft);
|
||||
gfx.DrawString("[Kunden-Nr. Absender]", fontText, XBrushes.Black, new XRect(x + c1 + 5, y + 20, c2 - 10, r1 - 22), XStringFormats.TopLeft);
|
||||
gfx.DrawString("[ZKZ/Titel]", fontText, XBrushes.Black, new XRect(x + c1 + c2 + 5, y + 20, c3 - 10, r1 - 22), XStringFormats.TopLeft);
|
||||
gfx.DrawString(amount, fontText, XBrushes.Black, new XRect(x + c1 + c2 + c3 + 5, y + 20, c4 - 10, r1 - 22), XStringFormats.TopLeft);
|
||||
|
||||
// Second row labels
|
||||
gfx.DrawString("Einlieferer:", fontLabel, XBrushes.Black, new XRect(x + 5, y + r1 + 4, c1 - 10, 14), XStringFormats.TopLeft);
|
||||
gfx.DrawString("Kunden-Nr. Einlieferer:", fontLabel, XBrushes.Black, new XRect(x + c1 + 5, y + r1 + 4, c2 - 10, 14), XStringFormats.TopLeft);
|
||||
gfx.DrawString("Interne Vermerke:", fontLabel, XBrushes.Black, new XRect(x + c1 + c2 + 5, y + r1 + 4, c3 - 10, 14), XStringFormats.TopLeft);
|
||||
gfx.DrawString("Laufzeit", fontLabel, XBrushes.Black, new XRect(x + c1 + c2 + c3 + 5, y + r1 + 4, c4 - 10, 14), XStringFormats.TopLeft);
|
||||
|
||||
// Second row values
|
||||
gfx.DrawString(customerName, fontText, XBrushes.Black, new XRect(x + 5, y + r1 + 20, c1 - 10, r2 - 22), XStringFormats.TopLeft);
|
||||
gfx.DrawString("[Kunden-Nr. Einlieferer]", fontText, XBrushes.Black, new XRect(x + c1 + 5, y + r1 + 20, c2 - 10, r2 - 22), XStringFormats.TopLeft);
|
||||
gfx.DrawString("[Interne Vermerke]", fontText, XBrushes.Black, new XRect(x + c1 + c2 + 5, y + r1 + 20, c3 - 10, r2 - 22), XStringFormats.TopLeft);
|
||||
gfx.DrawString("[Laufzeit]", fontText, XBrushes.Black, new XRect(x + c1 + c2 + c3 + 5, y + r1 + 20, c4 - 10, r2 - 22), XStringFormats.TopLeft);
|
||||
|
||||
// Middle area
|
||||
gfx.DrawString(groupNo, fontBig, XBrushes.Black,
|
||||
new XRect(x + 5, y + r1 + r2 + 5, w * 0.50 - 10, r3 - 10),
|
||||
XStringFormats.Center);
|
||||
|
||||
gfx.DrawString($"Fraktion {fraction}/{total_frac}", fontText, XBrushes.Black,
|
||||
new XRect(x + 5, y + r1 + r2 + r3 - 18, w * 0.50 - 10, 14),
|
||||
XStringFormats.CenterLeft);
|
||||
|
||||
gfx.DrawString("Bereich für postalische Zwecke:", fontLabel, XBrushes.Black,
|
||||
new XRect(midSplit + 5, y + r1 + r2 + 4, w - (midSplit - x) - 10, 14),
|
||||
XStringFormats.TopLeft);
|
||||
|
||||
// Bottom left labels
|
||||
// Bottom left labels
|
||||
gfx.DrawString("Einlieferungsdatum:", fontLabel, XBrushes.Black,
|
||||
new XRect(x + 5, y + r1 + r2 + r3 + 4, leftBottomW - 10, 14),
|
||||
XStringFormats.TopLeft);
|
||||
|
||||
gfx.DrawString("AM-Auftragsnummer:", fontLabel, XBrushes.Black,
|
||||
new XRect(x + 5, blY1 + 4, leftBottomW - 10, 14),
|
||||
XStringFormats.TopLeft);
|
||||
|
||||
gfx.DrawString("Bundgewicht:", fontLabel, XBrushes.Black,
|
||||
new XRect(x + 5, blY2 + 4, leftBottomW - 10, 14),
|
||||
XStringFormats.TopLeft);
|
||||
|
||||
gfx.DrawString("Paletten-Nr.:", fontLabel, XBrushes.Black,
|
||||
new XRect(x + 5, blY3 + 4, leftBottomW - 10, 14),
|
||||
XStringFormats.TopLeft);
|
||||
|
||||
gfx.DrawString("Bund-Nr./Bunde auf Palette:", fontLabel, XBrushes.Black,
|
||||
new XRect(x + 5, blY4 + 4, leftBottomW - 10, 14),
|
||||
XStringFormats.TopLeft);
|
||||
|
||||
gfx.DrawString("Bund-Nr. von Gesamtanzahl:", fontLabel, XBrushes.Black,
|
||||
new XRect(x + 5, blY5 + 4, leftBottomW - 10, 14),
|
||||
XStringFormats.TopLeft);
|
||||
|
||||
// Bottom placeholders rechts daneben, gleiche Zeile
|
||||
double valueX = x + leftBottomW * 0.55;
|
||||
double valueW = leftBottomW - (valueX - x) - 5;
|
||||
|
||||
gfx.DrawString("[Einlieferungsdatum]", fontText, XBrushes.Black,
|
||||
new XRect(valueX, y + r1 + r2 + r3 + 4, valueW, 14),
|
||||
XStringFormats.TopRight);
|
||||
|
||||
gfx.DrawString("[AM-Auftragsnummer]", fontText, XBrushes.Black,
|
||||
new XRect(valueX, blY1 + 4, valueW, 14),
|
||||
XStringFormats.TopRight);
|
||||
|
||||
gfx.DrawString("[Bundgewicht]", fontText, XBrushes.Black,
|
||||
new XRect(valueX, blY2 + 4, valueW, 14),
|
||||
XStringFormats.TopRight);
|
||||
|
||||
gfx.DrawString("[Paletten-Nr.]", fontText, XBrushes.Black,
|
||||
new XRect(valueX, blY3 + 4, valueW, 14),
|
||||
XStringFormats.TopRight);
|
||||
|
||||
gfx.DrawString("[Bund-Nr./Bunde auf Palette]", fontText, XBrushes.Black,
|
||||
new XRect(valueX, blY4 + 4, valueW, 14),
|
||||
XStringFormats.TopRight);
|
||||
|
||||
gfx.DrawString("[Bund-Nr. von Gesamtanzahl]", fontText, XBrushes.Black,
|
||||
new XRect(valueX, blY5 + 4, valueW, 14),
|
||||
XStringFormats.TopRight);
|
||||
|
||||
|
||||
// Right bottom postal area label
|
||||
gfx.DrawString("Bereich für postalische Zwecke:", fontLabel, XBrushes.Black,
|
||||
new XRect(x + leftBottomW + 5, y + r1 + r2 + r3 + 4, w - leftBottomW - 10, 14),
|
||||
XStringFormats.TopLeft);
|
||||
}
|
||||
|
||||
public void CreateInternationalRunningSheets(int setID, string path)
|
||||
{
|
||||
KasAddressList list = Settings._instance.addressSets.GetAddressSetByID(setID);
|
||||
|
||||
Reference in New Issue
Block a user