如何在PDFsharp中添加图像水印?

时间:2016-08-18 01:13:43

标签: c# winforms pdfsharp

所有示例都显示了如何使用PDFsharp添加文本水印。但是如果我需要添加图像水印呢?

我这样做了:

if (!String.IsNullOrEmpty(_logo) && System.IO.File.Exists(_logo))
{
    XImage logo = XImage.FromFile(_logo);
    XRect rectLogo = new XRect(0, 0, page.Width, page.Height);
    rectLogo.Scale(0.5, 0.5);
    gfx.DrawImage(logo, rectLogo);
}

图像出现,但不是水印。

编辑:

我终于手动放置了水印,但还有另外一件事需要解决。如何改变XImage的不透明度?我可以通过使用图像处理器来实现,但这不是主意。这是一个使用普通用户的软件,我不能告诉他在将图像指定为水印之前修改图像。任何解决方案?

这是目前的代码:

            if (!String.IsNullOrEmpty(_logo) && System.IO.File.Exists(_logo))
            {
                XImage logo = XImage.FromFile(_logo);
                double width = logo.PointWidth;
                double height = logo.PointHeight;
                double ratio = width / height;
                if (width > page.Width.Point * 0.5)
                {
                    width = page.Width.Point * 0.5;
                    height = width / ratio;
                }
                else if (height > page.Height.Point * 0.5)
                {
                    height = page.Height.Point * 0.5;
                    width = height * ratio;
                }

                double offsetX = (page.Width.Point - width) / 2;
                double offsetY = (page.Height.Point - height) / 2;

                XRect rectLogo = new XRect(offsetX, offsetY, width, height);
                gfx.DrawImage(logo, rectLogo);
            }

2 个答案:

答案 0 :(得分:2)

PDFSharp的水印样本存在的问题是他们没有使用PDF 1.6版本(reference)中引入的真实水印功能。这些示例使用XGraphics对象在现有内容下绘制,但它只是一个假水印。这是文档中的直接引用:

  

注意:从技术上讲,此示例中的水印是简单的图形输出。它们与PDF 1.5中引入的水印注释无关。

请注意,Adobe的官方参考说明在PDF 1.6中引入了水印注释,因此PDFSharp的文档中似乎存在错误。

不幸的是,无论PDFSharp是否支持真正的水印,我都没有可靠的来源,但我还没有看到他们所做的任何证据。事实是PDF 1.4版本完全受支持,其上方的所有内容仅得到部分支持。

答案 1 :(得分:0)

像往常一样,计算机会按照你的要求去做,而不是你想让他做什么。

如果您想让图像低于其他内容,请先绘制它。

如果您想要半透明图像,请使用透明图像或使用透明图像绘制。在这种情况下,您可以将图像放在页面的所有其他内容之上。