我正在尝试使用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);
答案 0 :(得分:0)
如果您使用的是PDFsharp 1.50测试版,请在调用XStringFormats.Default
时将XStringFormats.TopLeft
替换为path.AddString
。
更新:您正在调用字体大小为30的MeasureString
,但绘制的字体大小为150.因此,文本的位置是根据不正确的值计算的对于文本宽度和高度,水印是在错误的地方绘制的。
XStringFormats.TopLeft
是正确的(PDFsharp 1.50需要它,PDFsharp 1.32忽略它),但不能解决因使用不同的字体大小进行计算和绘图而导致的问题。