|
在工作中,为了防止文件被随意复制和传播,通常我们会选择在文档中添加水印来对文件进行有效保护。文字水印是比较常见的一种保护手段,它可以有效防止文件被任意复制和随意打印传播。不过,Excel默认并没有水印功能。此时,我们可以把插入的艺术字作为水印,将水印和工作表融合在一起,以防止文档被复制传播。那么如何轻松实现在Excel中添加水印呢?别着急,我给大家整理了一个高效便捷的方法,通过编程方式达到此目的。下面是我整理的具体步骤,并附上C#/VB.NET代码供大家参考。
程序环境:
本次测试时,在程序中引入 Spire.XLS.dll 文件。
方法1:
将Free Spire.XLS for .NET 下载到本地,解压,找到 BIN 文件夹下的 Spire.XLS.dll。然后在 Visual Studio 中打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”,将本地路径 BIN 文件夹下的 dll 文件添加引用至程序。
方法2::
通过NuGet安装。可通过以下 2 种方法安装:
1. 可以在 Visual Studio 中打开“解决方案资源管理器”,鼠标右键点击“引用”,“管理 NuGet 包”,然后搜索“Free Spire.XLS”,点击“安装”。等待程序安装完成。
2. 将以下内容复制到 PM 控制台安装。
Install-Package FreeSpire.XLS -Version 12.7
在Excel中添加水印
以下是详细步骤:
- 创建Workbook类的实例。
- 使用 Workbook.LoadFromFile() 方法加载 Excel 文件。
- 创建字体并定义文本。
- 遍历 Excel 文件中的所有工作表。
- 使用 DrawWatermarkImage() 方法创建基于文本的水印图像。
- 通过Worksheet.PageSetup.LeftHeaderImage 属性将图片设置为每个工作表左页眉的图像源。
- 将 Worksheet.PageSetup.LeftHeader 属性设置为“&G”,在左侧标题部分显示图像。
- 将工作表的查看模式更改为页面布局,以便查看水印。
- 使用 Workbook.SaveToFile() 方法保存结果文件。
完整代码
C#- 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;
- }
- }
- }
复制代码 VB.NET- 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
复制代码 效果图
—本文完—
来源:https://www.cnblogs.com/Carina-baby/archive/2023/01/19/17061732.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|