本文将介绍如何使用Spire.XLS组件给Excel工作表添加水印。Microsoft Excel没有直接的方法内置水印在Excel工作表中,我们可以通过添加背景图片在视觉上形成独特的水印效果,但是此类背景水印在打印Excel文档时水印图案会丢失。同时,我们也可以通过添加页眉页脚功能,将图片或文字加到Excel文档内容背后,实现类似水印的效果。但是该类水印只在打印预览或将视图模式为“页面视图”下才能直观可见。
通常情况下,水印分为文本水印和图片水印。Spire.XLS添加的水印实际上都为图片水印。下面我们将详细介绍使用Spire.XLS将文本以图片形式添加到Excel中, 生成文本水印。
添加背景文本图片水印
C#
static void Main(string[] args)
{
//加载Excel文档
Workbook workbook = new Workbook();
workbook.LoadFromFile("Test.xlsx");
//设置水印文字和字体
Font font = new Font("宋体", 36);
String watermark = "背景水印";
//设置背景图片为水印
foreach (Worksheet sheet in workbook.Worksheets)
{
//调用DrawText()方法创建的图片
Image imgWtrmrk = DrawText(watermark, font, Color.LightCoral, Color.White, sheet.PageSetup.PageHeight, sheet.PageSetup.PageWidth);
sheet.PageSetup.BackgoundImage = imgWtrmrk as Bitmap;
}
//保存文档并预览
workbook.SaveToFile("result.xlsx", ExcelVersion.Version2010);
System.Diagnostics.Process.Start("result.xlsx");
}
private static Image DrawText(String text, System.Drawing.Font font, Color textColor, Color backColor, double height, double width)
{
//将用来作为水印的文本返回为图片并设置其展示样式
Image img = new Bitmap((int)width, (int)height);
Graphics drawing = Graphics.FromImage(img);
SizeF textSize = drawing.MeasureString(text, font);
drawing.TranslateTransform(((int)width - textSize.Width) / 2, ((int)height - textSize.Height) / 2);
drawing.RotateTransform(-45);
drawing.TranslateTransform(-((int)width - textSize.Width) / 2, -((int)height - textSize.Height) / 2);
drawing.Clear(backColor);
Brush textBrush = new SolidBrush(textColor);
drawing.DrawString(text, font, textBrush, ((int)width - textSize.Width) / 2, ((int)height - textSize.Height) / 2);
drawing.Save();
return img;
}
VB.NET
Private Shared Sub Main(args As String())
'加载Excel文档
Dim workbook As New Workbook()
workbook.LoadFromFile("Test.xlsx")
'设置水印文字和字体
Dim font As New Font("宋体", 36)
Dim watermark As [String] = "背景水印"
'设置背景图片为水印
For Each sheet As Worksheet In workbook.Worksheets
'调用DrawText()方法创建的图片
Dim imgWtrmrk As Image = DrawText(watermark, font, Color.LightCoral, Color.White, sheet.PageSetup.PageHeight, sheet.PageSetup.PageWidth)
sheet.PageSetup.BackgoundImage = TryCast(imgWtrmrk, Bitmap)
Next
'保存文档并预览
workbook.SaveToFile("result.xlsx", ExcelVersion.Version2010)
System.Diagnostics.Process.Start("result.xlsx")
End Sub
Private Shared Function DrawText(text As [String], font As System.Drawing.Font, textColor As Color, backColor As Color, height As Double, width As Double) As Image
'将用来作为水印的文本返回为图片并设置其展示样式
Dim img As Image = New Bitmap(CInt(width), CInt(height))
Dim drawing As Graphics = Graphics.FromImage(img)
Dim textSize As SizeF = drawing.MeasureString(text, font)
drawing.TranslateTransform((CInt(width) - textSize.Width) / 2, (CInt(height) - textSize.Height) / 2)
drawing.RotateTransform(-45)
drawing.TranslateTransform(-(CInt(width) - textSize.Width) / 2, -(CInt(height) - textSize.Height) / 2)
drawing.Clear(backColor)
Dim textBrush As Brush = New SolidBrush(textColor)
drawing.DrawString(text, font, textBrush, (CInt(width) - textSize.Width) / 2, (CInt(height) - textSize.Height) / 2)
drawing.Save()
Return img
End Function
添加页眉页脚文本图片水印
C#
static void Main(string[] args)
{
//加载Excel文档
Workbook workbook = new Workbook();
workbook.LoadFromFile("Test.xlsx");
//设置水印文字和字体
Font font = new Font("宋体", 36);
String watermark = "内部资料";
//在页眉中插入图片作为模拟水印
foreach (Worksheet sheet in workbook.Worksheets)
{
//调用DrawText()方法创建的图片
Image imgWtrmrk = DrawText(watermark, font, System.Drawing.Color.LightCoral, System.Drawing.Color.White, sheet.PageSetup.PageHeight, sheet.PageSetup.PageWidth);
//插入图片作为LeftHeaderImage
sheet.PageSetup.LeftHeaderImage = imgWtrmrk;
sheet.PageSetup.LeftHeader = "&G";
//设置视图模式,页眉水印仅在Layout模式下直观可见
sheet.ViewMode = ViewMode.Layout;
}
//保存文档并预览
workbook.SaveToFile("result.xlsx", ExcelVersion.Version2010);
System.Diagnostics.Process.Start("result.xlsx");
}
private static Image DrawText(String text, System.Drawing.Font font, Color textColor, Color backColor, double height, double width)
{
//将用来作为水印的文本返回为图片并设置其展示样式
Image img = new Bitmap((int)width, (int)height);
Graphics drawing = Graphics.FromImage(img);
SizeF textSize = drawing.MeasureString(text, font);
drawing.TranslateTransform(((int)width - textSize.Width) / 2, ((int)height - textSize.Height) / 2);
drawing.RotateTransform(-45);
drawing.TranslateTransform(-((int)width - textSize.Width) / 2, -((int)height - textSize.Height) / 2);
drawing.Clear(backColor);
Brush textBrush = new SolidBrush(textColor);
drawing.DrawString(text, font, textBrush, ((int)width - textSize.Width) / 2, ((int)height - textSize.Height) / 2);
drawing.Save();
return img;
}
VB.NET
Private Shared Sub Main(args As String())
'加载Excel文档
Dim workbook As New Workbook()
workbook.LoadFromFile("Test.xlsx")
'设置水印文字和字体
Dim font As New Font("宋体", 36)
Dim watermark As [String] = "内部资料"
'在页眉中插入图片作为模拟水印
For Each sheet As Worksheet In workbook.Worksheets
'调用DrawText()方法创建的图片
Dim imgWtrmrk As Image = DrawText(watermark, font, System.Drawing.Color.LightCoral, System.Drawing.Color.White, sheet.PageSetup.PageHeight, sheet.PageSetup.PageWidth)
'插入图片作为LeftHeaderImage
sheet.PageSetup.LeftHeaderImage = imgWtrmrk
sheet.PageSetup.LeftHeader = "&G"
'设置视图模式,页眉水印仅在Layout模式下直观可见
sheet.ViewMode = ViewMode.Layout
Next
'保存文档并预览
workbook.SaveToFile("result.xlsx", ExcelVersion.Version2010)
System.Diagnostics.Process.Start("result.xlsx")
End Sub
Private Shared Function DrawText(text As [String], font As System.Drawing.Font, textColor As Color, backColor As Color, height As Double, width As Double) As Image
'将用来作为水印的文本返回为图片并设置其展示样式
Dim img As Image = New Bitmap(CInt(width), CInt(height))
Dim drawing As Graphics = Graphics.FromImage(img)
Dim textSize As SizeF = drawing.MeasureString(text, font)
drawing.TranslateTransform((CInt(width) - textSize.Width) / 2, (CInt(height) - textSize.Height) / 2)
drawing.RotateTransform(-45)
drawing.TranslateTransform(-(CInt(width) - textSize.Width) / 2, -(CInt(height) - textSize.Height) / 2)
drawing.Clear(backColor)
Dim textBrush As Brush = New SolidBrush(textColor)
drawing.DrawString(text, font, textBrush, (CInt(width) - textSize.Width) / 2, (CInt(height) - textSize.Height) / 2)
drawing.Save()
Return img
End Function