水印通常用于电子文档中以保护其版权或指定其状态。Microsoft Excel 没有内置的功能可以为 Excel 工作表添加水印,但您可以使用一些巧妙的方法来实现水印效果,例如插入页眉图像或艺术字。在本文中,我们将演示如何使用 Spire.XLS for .NET 在 Excel 中创建和添加页眉图像以模拟水印。
安装 Spire.XLS for .NET
首先,您需要添加 Spire.XLS for .NET 包中包含的 DLL 文件作为 .NET 项目中的引用。DLL 文件可以从此链接下载或通过 NuGet 安装。
PM> Install-Package Spire.XLS
在 Excel 中添加水印
为了创建标题图像,我们定义了一个名为 DrawWatermarkImage() 的自定义方法。此方法使您能够根据字符串生成自定义图像,例如“机密”、“草稿”、“内部使用”或您希望显示为水印的任何文本。图像生成后,您可以通过 Worksheet.PageSetup.LeftHeaderImage 和 Worksheet.PageSetup.LeftHeader 属性将其添加到 Excel 工作表的表头部分。
以下是详细步骤:
- 创建Workbook类的实例。
- 使用 Workbook.LoadFromFile() 方法加载 Excel 文件。
- 创建字体并定义文本。
- 遍历 Excel 文件中的所有工作表。
- 使用 DrawWatermarkImage() 方法创建基于文本的水印图像。
- 通过Worksheet.PageSetup.LeftHeaderImage 属性将图片设置为每个工作表左页眉的图像源。
- 将 Worksheet.PageSetup.LeftHeader 属性设置为“&G”,在左侧标题部分显示图像。
- 将工作表的查看模式更改为页面布局,以便查看水印。
- 使用 Workbook.SaveToFile() 方法保存结果文件。
- C#
- VB.NET
using Spire.Xls;
using System.Drawing;
namespace AddWatermark
{
class Program
{
static void Main(string[] args)
{
//初始化 Workbook 类的实例并加载 Excel 文件
Workbook workbook = new Workbook();
workbook.LoadFromFile("示例文档.xlsx");
//创建字体
Font font = new Font("宋体", 40);
//定义文本
string watermark = "内部使用";
//遍历文件中的所有工作表
foreach (Worksheet sheet in workbook.Worksheets)
{
//调用 DrawWatermarkImage() 方法根据文本创建图像
Image imgWtrmrk = DrawWatermarkImage(watermark, font, Color.LightCoral, Color.White, sheet.PageSetup.PageHeight, sheet.PageSetup.PageWidth);
//将图像添加到每个工作表的左侧标题部分
sheet.PageSetup.LeftHeaderImage = imgWtrmrk;
sheet.PageSetup.LeftHeader = "&G";
//将工作表的查看模式更改为页面布局以查看水印
sheet.ViewMode = ViewMode.Layout;
}
//保存结果文件
workbook.SaveToFile("添加水印.xlsx", ExcelVersion.Version2013);
}
private static Image DrawWatermarkImage(string text, Font font, Color textColor, Color backColor, double height, double width)
{
//创建具有指定宽度和高度的图像
Image img = new Bitmap((int)width, (int)height);
//从图像创建一个 Graphics 对象
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;
}
}
}
Imports Spire.Xls
Imports System.Drawing
Namespace AddWatermark
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'初始化 Workbook 类的新实例并加载 Excel 文件
Dim workbook As Workbook = New Workbook()
workbook.LoadFromFile("示例文档.xlsx")
'创建字体
Dim font As Font = New Font("宋体", 40)
'定义文本
Dim watermark = "内部使用"
'遍历文件中的所有工作表
For Each sheet As Worksheet In workbook.Worksheets
'调用 DrawWatermarkImage() 方法根据文本创建图像
Dim imgWtrmrk As Image = DrawWatermarkImage(watermark, font, Color.LightCoral, Color.White, sheet.PageSetup.PageHeight, sheet.PageSetup.PageWidth)
'将图像添加到每个工作表的左侧标题部分
sheet.PageSetup.LeftHeaderImage = imgWtrmrk
sheet.PageSetup.LeftHeader = "&G"
'将工作表的查看模式更改为页面布局以查看水印
sheet.ViewMode = ViewMode.Layout
Next
'保存结果文件
workbook.SaveToFile("添加水印.xlsx", ExcelVersion.Version2013)
End Sub
Private Shared Function DrawWatermarkImage(ByVal text As String, ByVal font As Font, ByVal textColor As Color, ByVal backColor As Color, ByVal height As Double, ByVal width As Double) As Image
'创建具有指定宽度和高度的图像
Dim img As Image = New Bitmap(width, height)
'从图像创建一个 Graphics 对象
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
End Class
End Namespace
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。