PDFsharp水印文本以文档为中心开始

时间:2015-10-08 11:41:37

标签: pdfsharp

我正在尝试使用PDFsharp中的水印。我正在关注他们网站上的示例,但是当我尝试绘制水印时,文本从屏幕中心开始而不是左下角。

 XGraphics gfx = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Append);
 var font = new XFont("Helvetica", 30, XFontStyle.Regular);
 var watermark = "DRAFT";
 XSize size = gfx.MeasureString(watermark, font);

 // Define a rotation transformation at the center of the page

 gfx.TranslateTransform(page.Width / 2, page.Height / 2);

 gfx.RotateTransform(-Math.Atan(page.Height / page.Width) * 180 / Math.PI);

 gfx.TranslateTransform(-page.Width / 2, -page.Height / 2);

 // Create a graphical path

 XGraphicsPath path = new XGraphicsPath();

 // Add the text to the path

 path.AddString(watermark, font.FontFamily, XFontStyle.BoldItalic, 150,
                new XPoint((page.Width - (size.Width * 2)) / 2, (page.Height - size.Height) / 2), 
                XStringFormats.Default);


 // Create a dimmed red pen and brush
 XPen pen = new XPen(XColor.FromArgb(50, 75, 0, 130), 3);

 XBrush brush = new XSolidBrush(XColor.FromArgb(50, 106, 90, 205));

 // Stroke the outline of the path
 gfx.DrawPath(pen, brush, path);

1 个答案:

答案 0 :(得分:0)

如果您使用的是PDFsharp 1.50测试版,请在调用XStringFormats.Default时将XStringFormats.TopLeft替换为path.AddString

更新:您正在调用字体大小为30的MeasureString,但绘制的字体大小为150.因此,文本的位置是根据不正确的值计算的对于文本宽度和高度,水印是在错误的地方绘制的。

XStringFormats.TopLeft是正确的(PDFsharp 1.50需要它,PDFsharp 1.32忽略它),但不能解决因使用不同的字体大小进行计算和绘图而导致的问题。