[ASP.NET]建立有浮水印的网页
时间:2019-09-09
本文章向大家介绍[ASP.NET]建立有浮水印的网页,主要包括[ASP.NET]建立有浮水印的网页使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
原本系统网页报表上没有浮水印,现在要加入浮水印,以下一步一步介绍实践的过程。
前言
原本系统网页报表上没有浮水印,现在要加入浮水印,以下一步一步介绍实践的过程。
实践
直觉的想法就是设定网页的底图,如下,
Q.那如果图要动态产生出来呢(我们的需求是要显示使用者及目前的时间)?
那就透过程序来动态产生图,如下,
透过GetWatermark.ashx来动态产生有点透明的图档出来,程序如下,
///
/// 动态产生有点透明的图片
///
///
/// 因为要存取Session的数据,所以实践 IRequiresSessionState Interface
///
public class GetWatermark : IHttpHandler, IRequiresSessionState
{
///
/// 产生Watermark的图片
///
///
///
///
public void ProcessRequest(HttpContext context)
{
const string DefaultFontName = @"细明体";
int useWay = 0;
//如果传进来的是2,就使用黑色,不然就用淡色
int.TryParse(context.Request["way"] as string, out useWay);
//设定输出为gif档
context.Response.ContentType = "image/gif";
int fontSize = 30;
int bmpWidth = 500;
int bmpHeight = 400;
string watermark = @"使用者:{0},日期:{1},时间:{2}";
//建立Bitmap
Bitmap bmp = new Bitmap(bmpWidth, bmpHeight);
//设定使用者及时间,并将逗号改成换行符号
string watermarks = string.Format(watermark, context.Session["User_Name"] as string,
DateTime.Now.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture),
DateTime.Now.ToString("HH:mm:ss")).Replace(",", Environment.NewLine);
//建立Graphics
Graphics canvas = Graphics.FromImage(bmp);
//设定透明的Brush
SolidBrush watermarkBrush;
if (useWay == 2)
{
//如果是用盖到画面上的方式,Color就直接用黑色
watermarkBrush = new SolidBrush(Color.Black);
}
else
{
//如果是用底图的话,Color就用淡一点
watermarkBrush = new SolidBrush(Color.FromArgb(128, 221, 221, 255));
}
//设定底图为白色
SolidBrush whiteBrush = new SolidBrush(Color.White);
//将底图画成白色
canvas.FillRectangle(whiteBrush, 0, 0, bmp.Width, bmp.Height);
//因为要由下往上画,所以将原点设定成下方
canvas.TranslateTransform(50, bmpHeight - 200);
//设定浮水印的字型及大小
Font f = new Font(DefaultFontName, fontSize, FontStyle.Bold);
//设定旋转的角度为330
canvas.RotateTransform(330);
//将浮水印画上去
canvas.DrawString(watermarks, f, watermarkBrush, fontSize, 0, StringFormat.GenericTypographic);
//将图档输出去
bmp.Save(context.Response.OutputStream, ImageFormat.Gif);
}
public bool IsReusable
{
get
{
return false;
}
}
}
使用测试网页试一下,底图在网页中间呈现,感觉还不错。
WatermarkNoInh.aspx
WatermarkNoInh.aspx.CS
public partial class WatermarkNoInh : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Session["User_Name"] = "郭小玉";
DataTable myData = new DataTable();
myData.Columns.Add("c1", typeof(int));
myData.Columns.Add("c2", typeof(string));
for (int i = 0; i < 100; i++)
{
myData.Rows.Add(i, i.ToString());
}
GridView1.DataSource = myData;
GridView1.DataBind();
}
}
这时设定GridView套用Style时,发现底图被BackColor给盖掉了,如下,
所以再Render时,再透过JQuery将所有对象的background-color设成透明的,如下,
$(document).ready(function ()
{
$('*').css('background-color', 'transparent');
});
Q.那不就有加Style跟没加Style一样了吗?
是的,不过,如果是不想改原有程序的Style,就可以这样用!
不然就使用图片盖到最上面的方式(UseWatermark=2)。
Q.那如果有的网页报表要有浮水印,有些的不要呢?
那就建立一个产生浮水印的WatermarkBasePage,然后要浮水印的Page就去继承它(如果您原本就已经有底层的Page,就可直接把Code加在底层的Page上),程序如下(参考ASP.NET - C# Application Environment Backsplash),
public class WatermarkBasePage : System.Web.UI.Page
{
///
/// 是否要启用浮水印
///
///
/// 0:不使用浮水印
/// 1:使用底图方式的浮水印
/// 2:使用z-index方式的浮水印
///
public int UseWatermark
{
get;
set;
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
switch (UseWatermark)
{
case 1:
//要将页面上所有对象的背景色取消掉
//这样底图才不会被盖掉
ClientScript.RegisterClientScriptBlock(this.GetType(), "UseWatermark1",
@" $(document).ready(function ()
{ $('*').css('background-color', 'transparent');
if($('#imgWatermark').length==0){
$('body').prepend('');
}
$(window).resize();
});
$(window).resize(function() {
$('#imgWatermark').css('z-index', '-1').css('opacity','0.1').css('width', $('body').width()-20).css('height', $('body').height()-20);
});", true);
break;
case 2:
//使用图片盖到画面上,并随画面调整图片大小
ClientScript.RegisterClientScriptBlock(this.GetType(), "UseWatermark2",
@" $(document).ready(function ()
{
if($('#imgWatermark').length==0){
$('body').prepend('');
}
$(window).resize();
});
$(window).resize(function() {
$('#imgWatermark').css('z-index', '999').css('opacity','0.1').css('width', $('body').width()-20).css('height', $('body').height()-20);
});", true);
break;
}
}
在要使用的Page中继承自WatermarkBasePage,并设定UseWatermark属性为1或是2 (1:使用底图方式的浮水印,2:使用z-index方式的浮水印),就会动态产生图,并设定为该网页的底图。
public partial class WatermarkTest1 : WatermarkBasePage
{
protected void Page_Load(object sender, EventArgs e)
{
//要使用底图方式的浮水印
UseWatermark = 1;
Session["User_Name"] = "郭小玉";
DataTable myData = new DataTable();
myData.Columns.Add("c1", typeof(int));
myData.Columns.Add("c2", typeof(string));
for (int i = 0; i < 100; i++)
{
myData.Rows.Add(i, i.ToString());
}
GridView1.DataSource = myData;
GridView1.DataBind();
}
}
public partial class WatermarkTest1 : WatermarkBasePage
{
protected void Page_Load(object sender, EventArgs e)
{
//2:使用z-index方式的浮水印
UseWatermark = 2;
Session["User_Name"] = "郭小玉";
DataTable myData = new DataTable();
myData.Columns.Add("c1", typeof(int));
myData.Columns.Add("c2", typeof(string));
for (int i = 0; i < 100; i++)
{
myData.Rows.Add(i, i.ToString());
}
GridView1.DataSource = myData;
GridView1.DataBind();
}
}
结论
以上提供2种浮水印方式,各Page可依需求来设定它。您也能依您的需求去调整,比如说写浮水印的方式,可从左上到右下,或是画个圆圈。
PS.感谢655 Fred的Support。
测试程序
Watermarks.zip 2012/09/10 改使用图档然后用z-Index来决定放在控件的上面或下面。
原文地址:https://www.cnblogs.com/chinatrump/p/11490877.html
- 在 .Net 设定 proxy 的方法
- MVC结构简介
- 优酷、爱奇艺、摩拜……多家网络平台被曝注册容易注销难!面临个人隐私泄露风险
- WordPress中借助.htaccess屏蔽某个IP或某个IP段(防垃圾评论)
- ASP.NET 调味品:AJAX
- CTreeCtrl 控件使用总结
- 高盛成立交易部门,涉足比特币和加密货币交易
- WordPress主题开发:添加主题更新提醒功能
- WordPress主题开发:添加主题更新提醒功能
- ASP.NET2.0应用中定制安全凭证之实践篇
- Kaggle大神带你上榜单Top2%:点击预测大赛纪实(下)
- WordPress主题后台选项开发框架 Options Framework 介绍
- vc++ 在程序中运行另一个程序的方法
- 为Options Framework主题后台框架添加后台侧边栏
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法