首页 > 编程语言 >C#/VB.NET 在Excel中添加水印

C#/VB.NET 在Excel中添加水印

时间:2023-01-19 16:33:40浏览次数:67  
标签:VB sheet C# Excel textSize 水印 height font drawing

在工作中,为了防止文件被随意复制和传播,通常我们会选择在文档中添加水印来对文件进行有效保护。文字水印是比较常见的一种保护手段,它可以有效防止文件被任意复制和随意打印传播。不过,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

效果图

—本文完—

标签:VB,sheet,C#,Excel,textSize,水印,height,font,drawing
From: https://www.cnblogs.com/Carina-baby/p/17061732.html

相关文章

  • RabbitMQ在docker下安装启动说明
    RabbitMQ在docker下安装启动说明1.RabbitMQ消息服务器安装1.把rabbitmq-3.6.6-management.tar包放到指定的路径下面,如图所示    2.用docker指令把rabbitmq注册为......
  • error: Failed dependencies:解决
    使用rpma安装安装包时,会出现error:Faileddependencies:意思是失败的依赖  解决方法:在安装包后面加两个参数,如rpm-ivh包名--nodeps--force加上那两个参数的意义......
  • PyTorch图像分类实战task2——预训练模型预测
    预训练图像分类模型预测视频链接:https://www.bilibili.com/video/BV1qe4y1D7zD/?spm_id_from=pageDriver&vd_source=ec0dfe3d40081b44c0160eacc0f39d0f脚本文件:https://g......
  • [VS Code] 解决C#代码F12无效
    问题:在VSCode中,C#代码无法转到定义(F12无效)。解决:1.右键任意文件,打开命令面板(或快捷键Ctrl+Shift+P) 2.找到OmniSharp:SelectProject. 3.选择对应的项目或......
  • CF1635E做题记录
    *2200的绿,是道好题不想投题解,因为思路重复,而且太麻烦了。先设任意一点向左,判断方向关系是否矛盾,类似二分图判定的染色。确定下方向后,就可以将原条件转换成为若干个类似......
  • C#爬虫开发小结
    前言2023年以来一直很忙,临近春节,各种琐事更多,但鸽了太久没写文章总是不舒坦,忙中偷闲来记录下最近用C#写爬虫的一些笔记。爬虫一般都是用Python来写,生态丰富,动态语言开发......
  • 2022,Feature Evaluation for Underwater Acoustic Object Counting and F0 Estimatio
    paperAbstract在执行水声目标检测任务时,需要对目标数N进行计数,当N大于1时进行声源分离,并从分离出的噪声中提取每个目标的运动参数(如轴频或FO)。尽管深度学习方法在图像......
  • abc236 E - Average and Median
    题意:在给定数组中选数,要求任意相邻的两数至少选一个。问选出来的数的最大平均数和最大中位数\(n\le1e5,1\lea_i\le1e9\)思路:平均数、中位数的典中典二分+转化this......
  • Codeforces Round #820 (Div. 3) A~F泛做
    一套题学到不少东西A.TwoElevators模拟#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'#definecerr(x)std::cerr<<(#x)<<"is"<<(x)<<......
  • 移动端 ios pageShow 事件和 android visibilitychange 事件; A页面跳转到B页面操作
    1.pageshow事件当浏览器因导航而显示窗口的文档时,pageshow事件将被触发。这包括:初始加载页面从同一窗口或选项卡中的另一个页面导航到该页面在移动操作系统上恢复......