在工作中,為了防止文件被隨意複製和傳播,通常我們會選擇在文檔中添加水印來對文件進行有效保護。文字水印是比較常見的一種保護手段,它可以有效防止文件被任意複製和隨意列印傳播。不過,Excel預設並沒有水印功能。此時,我們可以把插入的藝術字作為水印,將水印和工作表融合在一起,以防止文檔被覆制傳播。那麼如何 ...
在工作中,為了防止文件被隨意複製和傳播,通常我們會選擇在文檔中添加水印來對文件進行有效保護。文字水印是比較常見的一種保護手段,它可以有效防止文件被任意複製和隨意列印傳播。不過,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
效果圖
—本文完—