using PdfSharpCore.Drawing;
using PdfSharpCore.Pdf.Annotations;
public static void Main()
Console.WriteLine("Hello World");
byte[] pdfBytes = GenerateChargebackPdf("2023-11-15", "1234-5678-9012-3456", 123.45m, "55", "Test Reason");
File.WriteAllBytes("chargeback.pdf", pdfBytes);
public static byte[] GenerateChargebackPdf(string chargebackDate, string cardNumber,
decimal amount, string reasonCode, string reasonDescription)
using (var memoryStream = new MemoryStream())
var document = new PdfDocument();
var page = document.AddPage();
var gfx = XGraphics.FromPdfPage(page);
var fontLink = new XFont("Verdana", 11, XFontStyle.Underline);
string linkUrl = "https://www.google.com";
string linkText = "Go to Google";
var size = gfx.MeasureString(linkText, fontLink);
double linkRectanglePadding = 2;
var rect = new XRect(Math.Floor(x), Math.Floor(y), size.Width + linkRectanglePadding, size.Height + linkRectanglePadding);
gfx.DrawString(linkText, fontLink, XBrushes.Blue, rect, XStringFormats.TopLeft);
var pdfRect = new PdfRectangle();
pdfRect.X1 = gfx.Transformer.WorldToDevice(new XPoint(rect.X, rect.Y)).X;
pdfRect.Y1 = gfx.Transformer.WorldToDevice(new XPoint(rect.X, rect.Y)).Y;
pdfRect.X2 = gfx.Transformer.WorldToDevice(new XPoint(rect.X + rect.Width, rect.Y + rect.Height)).X;
pdfRect.Y2 = gfx.Transformer.WorldToDevice(new XPoint(rect.X + rect.Width, rect.Y + rect.Height)).Y;
var link = PdfLinkAnnotation.CreateWebLink(pdfRect, linkUrl);
page.Annotations.Add(link);
document.Save(memoryStream, false);
return memoryStream.ToArray();