如何在.NET中加水印并显示用户生成的html

时间:2019-03-07 23:23:39

标签: html .net webbrowser-control

我需要想出一种为用户生成的HTML加水印并将其显示给用户的方法。

我尝试通过设置背景图像来修改HTML,但是如果任何html元素包含背景颜色或图像,则该解决方案将不起作用。

因此,我认为在Web浏览器控件中显示HTML和给控件加水印会更容易。男孩,我错了。

我尝试创建一个用户控件并从WebBrowser派生并覆盖paint方法。那没用。

下一个想法是仅在Web浏览器控件上绘制。

这是我想出的。在此示例中,我在窗体上拍了一个标签,Web浏览器控件和两个图片框。我创建图像并将其设置到两个图片框。我在标签上放了一个图片框,在水印上放了另一个。

标签上的图片框按预期显示,但Web浏览器控件上的图片框没有显示。

我没主意了。有什么建议吗?

public partial class Form1 : Form
{
    string WatermarkText = "Confidential";
    Font WatermarkFont = new Font("Microsoft Sans Serif", 24, FontStyle.Bold);
    int WatermarkAngle = 45;
    Color WatermarkColor = Color.PaleTurquoise;

    public Form1()
    {
        InitializeComponent();

        AllowTransparency = true;

        label1.AutoSize = false;
        label1.Text = "Test Text";
        label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;

        webBrowser1.Navigate("http://www.google.com");
        var img = creategraphics(WatermarkText);

        label1.Size = pictureBox2.Size = pictureBox1.Size = img.Size;

        label1.Controls.Add(pictureBox1);
        pictureBox1.Image = img;
        pictureBox1.BackColor = Color.Transparent;
        pictureBox1.Location = new Point(0, 0);

        webBrowser1.Controls.Add(pictureBox2);
        pictureBox2.Image = img;
        pictureBox2.BackColor = Color.Transparent;
        pictureBox2.Location = new Point(0, 0);
    }

    Image creategraphics(string text)
    {
        if (String.IsNullOrWhiteSpace(text)) return null;

        var size = getWatermarkSize(text, WatermarkAngle, WatermarkFont, out double hypotenuse);
        var img = new Bitmap(size.Width, size.Height);
        var g = Graphics.FromImage(img);
        var brush = new SolidBrush(WatermarkColor);
        var stringFormat = new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };
        g.RotateTransform((float)-WatermarkAngle);
        g.DrawString(text, WatermarkFont, brush, new Point(0, (int)hypotenuse / 2), stringFormat);
        return img;
    }

    private static Size getWatermarkSize(string text, int angle, Font font, out double hypotenuse)
    {
        if (angle > 90) throw new ArgumentOutOfRangeException("angle");

        using (var bitmap = new Bitmap(1, 1))
        using (var graphics = Graphics.FromImage(bitmap))
        {
            var size = graphics.MeasureString(text, font);
            hypotenuse = size.Width + size.Height;
            double radians = (angle / 180.0) * Math.PI;
            var width = (Math.Cos(radians) * size.Width) + (Math.Sin(radians) * size.Height);
            var height = (Math.Cos(radians) * size.Height) + (Math.Sin(radians) * size.Width);
            return new Size((int)width, (int)height);
        }
    }
}

这就是我得到的

enter image description here

0 个答案:

没有答案