[chore:] PdfBuilder.cs skips empty addresses

This commit is contained in:
Elias Fierke
2025-12-21 11:43:41 +01:00
parent 1cba67253a
commit b82473ada2

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using PdfSharp;
using PdfSharp.Drawing;
@@ -12,7 +13,6 @@ public class PdfBuilder
private const int CellsPerRow = 3;
private const int CellsPerPage = 21; // 3 columns × 7 rows
private readonly XFont _boldFont = new("Arial", 9, XFontStyleEx.Bold);
private readonly XFont _smallFont = new("Arial", 6, XFontStyleEx.Regular);
private readonly double _cellHeight = 42.43; // mm
private readonly double _cellPaddingBottom = 5; // mm
@@ -33,6 +33,7 @@ public class PdfBuilder
private readonly double _marginRight = 0; // mm
private readonly double _marginTop = 0; // mm
private readonly XFont _regularFont = new("Arial", 9, XFontStyleEx.Regular);
private readonly XFont _smallFont = new("Arial", 6, XFontStyleEx.Regular);
/// <summary>
/// Creates a PDF document with address stickers from an AddressSet in a 3×7 grid layout on A4 pages.
@@ -50,7 +51,8 @@ public class PdfBuilder
throw new ArgumentException($"AddressSet with ID {addressSetId} contains no addresses");
// Generate markdown addresses from all KasPersons in the set
var addresses = new string?[addressSet.KasPersons.Count];
//var addresses = new string?[addressSet.KasPersons.Count];
var addresses = new List<string>();
// find customer (owner) to include sender_address
string senderLine = null;
@@ -69,10 +71,11 @@ public class PdfBuilder
for (var i = 0; i < addressSet.KasPersons.Count; i++)
{
var addr = AddressCreator.CreateFinalMarkdownString(addressSet.KasPersons[i].refsid);
if (string.IsNullOrWhiteSpace(addr.Trim())) continue;
if (!string.IsNullOrEmpty(senderLine))
addresses[i] = senderLine + (addr ?? "");
addresses.Add(senderLine + addr);
else
addresses[i] = addr;
addresses.Add(addr);
}
CreateAddressLabelPdf(addresses, outputPath);
@@ -96,7 +99,8 @@ public class PdfBuilder
throw new ArgumentException($"AddressSet with ID {addressSetId} contains no addresses");
// Generate markdown addresses from all KasPersons in the set
var addresses = new string?[addressSet.KasPersons.Count];
//var addresses = new string?[addressSet.KasPersons.Count];
var addresses = new List<string>();
// find customer (owner) to include sender_address
string senderLine = null;
@@ -114,10 +118,11 @@ public class PdfBuilder
for (var i = 0; i < addressSet.KasPersons.Count; i++)
{
var addr = AddressCreator.CreateFinalMarkdownString(addressSet.KasPersons[i].refsid);
if (string.IsNullOrWhiteSpace(addr.Trim())) continue;
if (!string.IsNullOrEmpty(senderLine))
addresses[i] = senderLine + (addr ?? "");
addresses.Add(senderLine + (addr ?? ""));
else
addresses[i] = addr;
addresses.Add(addr);
}
CreateAddressLabelPdfWithPlaceholder(addresses, placeholderText, outputPath);
@@ -128,15 +133,15 @@ public class PdfBuilder
/// </summary>
/// <param name="addresses">Array of addresses (from CreateFinalMarkdownString)</param>
/// <param name="outputPath">Path where the PDF should be saved</param>
public void CreateAddressLabelPdf(string?[] addresses, string outputPath)
public void CreateAddressLabelPdf(List<string> addresses, string outputPath)
{
if (addresses == null || addresses.Length == 0)
if (addresses == null || addresses.Count == 0)
throw new ArgumentException("Addresses array cannot be null or empty");
var document = new PdfDocument();
var addressIndex = 0;
while (addressIndex < addresses.Length)
while (addressIndex < addresses.Count)
{
var page = document.AddPage();
page.Size = PageSize.A4;
@@ -158,9 +163,9 @@ public class PdfBuilder
/// <param name="addresses">Array of addresses</param>
/// <param name="placeholderText">Text for the first cell (top-left)</param>
/// <param name="outputPath">Path where the PDF should be saved</param>
public void CreateAddressLabelPdfWithPlaceholder(string?[] addresses, string placeholderText, string outputPath)
public void CreateAddressLabelPdfWithPlaceholder(List<string> addresses, string placeholderText, string outputPath)
{
if (addresses == null || addresses.Length == 0)
if (addresses == null || addresses.Count == 0)
throw new ArgumentException("Addresses array cannot be null or empty");
var document = new PdfDocument();
@@ -168,7 +173,7 @@ public class PdfBuilder
var addressIndex = 0;
var isFirstCell = true;
while (addressIndex < addresses.Length || isFirstCell)
while (addressIndex < addresses.Count || isFirstCell)
{
var page = document.AddPage();
page.Size = PageSize.A4;
@@ -182,7 +187,7 @@ public class PdfBuilder
document.Save(outputPath);
}
private void DrawPage(XGraphics gfx, string?[] addresses, ref int addressIndex)
private void DrawPage(XGraphics gfx, List<string> addresses, ref int addressIndex)
{
var cellCount = 0;
@@ -190,7 +195,7 @@ public class PdfBuilder
{
for (var col = 0; col < 3; col++)
{
if (addressIndex >= addresses.Length) break;
if (addressIndex >= addresses.Count) break;
var x = MmToPoints(_marginLeft + col * _cellWidth);
var y = MmToPoints(_marginTop + row * _cellHeight);
@@ -200,11 +205,11 @@ public class PdfBuilder
cellCount++;
}
if (addressIndex >= addresses.Length) break;
if (addressIndex >= addresses.Count) break;
}
}
private void DrawPageWithPlaceholder(XGraphics gfx, string?[] addresses, ref int addressIndex,
private void DrawPageWithPlaceholder(XGraphics gfx, List<string> addresses, ref int addressIndex,
ref bool isFirstCell, string placeholderText)
{
var cellCount = 0;
@@ -221,7 +226,7 @@ public class PdfBuilder
DrawCell(gfx, x, y, placeholderText);
isFirstCell = false;
}
else if (addressIndex < addresses.Length)
else if (addressIndex < addresses.Count)
{
DrawCell(gfx, x, y, addresses[addressIndex]);
addressIndex++;