C#/VB.NET 添加多行多列图片水印到Word文档

在Word里面添加水印时,常见的情况是仅支持对整个页面添加一个水印效果;对于需要将水印铺满整个页面的效果则可以参考本文中的方法。本文介绍一种比较灵活的方式实现添加多行多列(平铺)图片水印到Word文档。下面是详细方法及步骤。

环境配置

引入Word API- Free Spire.Doc for .NET( Spire.Doc.dll)

1. 通过NuGet引入dll(2种方法)的方法

(1)可以在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“管理NuGet包”,然后搜索“Free Spire.Doc”,点击“安装”。等待程序安装完成。

(2)将以下内容复制到PM控制台安装:Install-Package FreeSpire.Doc -Version 10.2

2. 手动添加dll引用的方法

可通过手动下载包到本地,然后解压,找到BIN文件夹下的Spire.Doc.dll。然后在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”,将本地路径BIN文件夹下的dll文件添加引用至程序。

添加多行多列图片水印

实现多行多列图片水印效果,即在页眉处添加图片,并通过多次复制图片来模拟将水印铺满整个页面的效果,根据横向复制或者纵向复制的不同图片数量,可任意调整水印图片在页面中的分布效果。以下,是本次实现图片水印的主要代码步骤:

  • 创建 Document类的对象,并通过 Document.LoadFromFile(string fileName)方法加载Word文档。

  • for循环文档中的所有Section,并通过 Document.Sections[int Index]属性获取页面中的节。

  • 使用 HeadersFooters.Header属性获取页眉,并通过 HeaderFooter.AddParagraph()方法添加段落到页眉。

  • 创建 DocPicture类的对象,并调用 DocPicture.LoadImage(string imgFile)方法加载水印图片,以及通过TextWrappingStyle枚举值设置图片环绕方式。

  • 通过for循环以 DocPicture.Clone()方法多次复制图片,并通过 DocPicture.VerticalPosition DocPicture.HorizontalPosition属性设置图片位置排列。

  • 调用 Paragraph.ChildObjects.Add(IDocumentObject entity)方法添加图片到页眉段落。

  • 最后,通过 Document.SaveToFile(string fileName, FileFormat fileFormat)方法保存文档都指定路径。

C#

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
 
namespace MultiLinePictureWatermark
{
    class Program
    {
        static void Main(string[] args)
        {
            //加载Word文档
            Document doc = new Document();
            doc.LoadFromFile("test.docx");
 
            //遍历所有section
            for (int i = 0; i < doc.Sections.Count; i++)
            {
                Section section = doc.Sections[i];
 
                //获取section的页眉
                HeaderFooter header = section.HeadersFooters.Header;
                
                //添加段落到页眉
                Paragraph paragraph1 = header.AddParagraph();
 
                //加载水印图片
                DocPicture picture = new DocPicture(doc);
                picture.LoadImage("panda.png");
                picture.TextWrappingStyle = TextWrappingStyle.Behind;
 
                //复制图片
                for (int p = 0; p < 5; p++)
                {
                    for (int q = 0; q < 3; q++)
                    {
                        picture = (DocPicture)picture.Clone();
                        picture.VerticalPosition = 50 + 150 * p;
                        picture.HorizontalPosition = 10 + 140 * q;
                        paragraph1.ChildObjects.Add(picture);
                    }
                }
            }
 
            //保存文档
            doc.SaveToFile("MultiLinePictureWatermatk.docx", FileFormat.Docx2013);
        }
    }
}

VB.NET

Imports Spire.Doc
Imports Spire.Doc.Documents
Imports Spire.Doc.Fields
 
Namespace MultiLinePictureWatermark
         Class Program
                   Private Shared Sub Main(args As String())
                            '加载Word文档
                            Dim doc As New Document()
                            doc.LoadFromFile("test.docx")
 
                            '遍历所有section
                            For i As Integer = 0 To doc.Sections.Count - 1
                                     Dim section As Section = doc.Sections(i)
 
                                     '获取section的页眉
                                     Dim header As HeaderFooter = section.HeadersFooters.Header
 
                                     '添加段落到页眉   
                                     Dim paragraph1 As Paragraph = header.AddParagraph()
 
                                     '加载水印图片
                                     Dim picture As New DocPicture(doc)
                                     picture.LoadImage("panda.png")
                                     picture.TextWrappingStyle = TextWrappingStyle.Behind
 
                                     '复制图片
                                     For p As Integer = 0 To 4
                                               For q As Integer = 0 To 2
                                                        picture = DirectCast(picture.Clone(), DocPicture)
                                                        picture.VerticalPosition = 50 + 150 * p
                                                        picture.HorizontalPosition = 10 + 140 * q
                                                        paragraph1.ChildObjects.Add(picture)
                                               Next
                                     Next
                            Next
 
                            '保存文档
                            doc.SaveToFile("MultiLinePictureWatermatk.docx", FileFormat.Docx2013)
                   End Sub
         End Class
End Namespace



—End—



请使用浏览器的分享功能分享到微信等