C#实现添加多行文本水印到Word文档
作者:E-iceblue 发布时间:2023-03-22 07:45:33
一般情况下,在Word中添加文字水印仅支持添加一个文本字样的水印,但在复杂的办公环境中,由于对不同文档的设计要求,需要在Word文档中添加平铺水印效果,即文档中的水印文字以多行多列分布的形式存在。本文将介绍如何来实现该水印效果的方法,下面是详细步骤及方法。
dll引用
通过 NuGet 引入dll(2种方法)的方法
1.可以在Visual Studio中打开 【解决方案资源管理器】,鼠标右键点击 【引用】,【管理NuGet包】,然后搜索 【Free Spire.Doc】,点击【安装】。等待程序安装完成。
2.将以下内容复制到PM控制台安装:
Install-Package FreeSpire.Doc -Version 10.2
手动添加dll引用的方法
可通过手动 下载包 到本地,然后解压,找到BIN文件夹下的Spire.Doc.dll。然后在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”,将本地路径BIN文件夹下的dll文件添加引用至程序。
添加多行多列文字水印
在Word中添加多行文字水印时,实现的方法是通过在页眉中添加形状艺术字,并通过多次复制形状来模拟实现多行文字水印效果。以下是实现水印添加的主要代码步骤:
创建Document类的对象,并调用Document.LoadFromFile(string fileName)方法加载Word文档。
创建ShapeObject类的实例,并通过ShapeObject.Width、ShapeObject.Height、ShapeObject.VerticalPosition、ShapeObject.Rotation、ShapeObject.WordArt.Text、ShapeObject.WordArt.FontFamily、ShapeObject.FillColor等属性设置形状大小、位置、旋转角度、水印文字、字体及颜色等。
for循环遍历所有Section,通过Section.HeadersFooters.Header属性获取页眉,并以HeaderFooter.AddParagraph()方法添加段落到页眉。
通过for循环以ShapeObject.Clone()方法多次复制形状,并通过ShapeObject.VerticalPosition和ShapeObject.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 MultiLineTextWatermark
{
class Program
{
static void Main(string[] args)
{
//加载Word文档
Document doc = new Document();
doc.LoadFromFile("test.docx");
//创建形状,并设置大小、水印文字、位置及样式
ShapeObject shape = new ShapeObject(doc, ShapeType.TextPlainText);
shape.Width = 60;
shape.Height =15;
shape.VerticalPosition = 25;
shape.HorizontalPosition = 20;
shape.Rotation = 320;
shape.WordArt.Text = "草稿副本";
shape.WordArt.FontFamily = "宋体";
shape.FillColor = System.Drawing.Color.Red;
shape.StrokeColor = System.Drawing.Color.Red;
//遍历所有section
for (int n = 0; n < doc.Sections.Count; n++)
{
Section section = doc.Sections[n];
//获取页眉
HeaderFooter header = section.HeadersFooters.Header;
//添加段落到页眉
Paragraph paragraph1 = header.AddParagraph();
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 6; j++)
{
//复制形状并设置多行多列位置
shape = (ShapeObject)shape.Clone();
shape.VerticalPosition = 50 + 150 * i;
shape.HorizontalPosition = 20 + 160 * j;
//添加形状到段落
paragraph1.ChildObjects.Add(shape);
}
}
}
//保存文档
doc.SaveToFile("result.docx", FileFormat.Docx2013);
System.Diagnostics.Process.Start("result.docx");
}
}
}
VB.NET
Imports Spire.Doc
Imports Spire.Doc.Documents
Imports Spire.Doc.Fields
Namespace MultiLineTextWatermark
Class Program
Private Shared Sub Main(args As String())
'加载Word文档
Dim doc As New Document()
doc.LoadFromFile("test.docx")
'创建形状,并设置大小、水印文字、位置及样式
Dim shape As New ShapeObject(doc, ShapeType.TextPlainText)
shape.Width = 60
shape.Height = 15
shape.VerticalPosition = 25
shape.HorizontalPosition = 20
shape.Rotation = 320
shape.WordArt.Text = "草稿副本"
shape.WordArt.FontFamily = "宋体"
shape.FillColor = System.Drawing.Color.Red
shape.StrokeColor = System.Drawing.Color.Red
'遍历所有section
For n As Integer = 0 To doc.Sections.Count - 1
Dim section As Section = doc.Sections(n)
'获取页眉
Dim header As HeaderFooter = section.HeadersFooters.Header
'添加段落到页眉
Dim paragraph1 As Paragraph = header.AddParagraph()
For i As Integer = 0 To 4
For j As Integer = 0 To 5
'复制形状并设置多行多列位置
shape = DirectCast(shape.Clone(), ShapeObject)
shape.VerticalPosition = 50 + 150 * i
shape.HorizontalPosition = 20 + 160 * j
'添加形状到段落
paragraph1.ChildObjects.Add(shape)
Next
Next
Next
'保存文档
doc.SaveToFile("result.docx", FileFormat.Docx2013)
System.Diagnostics.Process.Start("result.docx")
End Sub
End Class
End Namespace
水印效果:
来源:https://www.cnblogs.com/Yesi/p/16493239.html


猜你喜欢
- Android 有两种方式可以设置全屏.第一种方式:在protected void onCreate(Bundle savedInstanc
- 导读Lombok:可以让你的POJO代码特别简洁,不止简单在BO/VO/DTO/DO等大量使用,还有设计模式,对象对比等MybatisPlu
- 我们编程的过程中大部分使用了很出色的ORM框架,例如:MyBatis,Hibernate,SpringJDBC,但是这些都离不开数据驱动JD
- 本文实例为大家分享了java使用HashMap实现斗地主的具体代码,供大家参考,具体内容如下案例介绍按照斗地主的规则,完成洗牌发牌的动作。
- 本文实例为大家分享了java实现飞机游戏的具体代码,供大家参考,具体内容如下MyGameFrame类:主要的调用类package sc.wh
- 命名空间提供了一种从逻辑上组织类的方式,防止命名冲突。几种常见语言C++命名空间是可以嵌套的嵌套的命名空间是指定义在其他命名空间中的命名空间
- 面试题1:你们是怎样保存用户密码等敏感数据的?本题回答参考朱晔的《Java业务开发常见错误100例》我们知道,用户名、密码、身份证等都属于用
- 每日一笑下班和实习生一起回家,公交站等车,一乞丐把碗推向实习生乞讨。这时,实习生不慌不忙的说了句:“我不要你的钱,你这钱
- 大叔我北漂十多年,一直没有摇到北京的车牌,每周都需要通过一个 APP 办理“进京证”,当我办理 19 年最后一次进京证的时候,APP 给出了
- tcp客户端示例#include <errno.h> #include <sys/socket.h> #includ
- 今天查看登录日志,发现http_x_forwarded_for获取到的ip地址有些是内网ip地址,有些则是公网和内网ip地址一起获取到,用逗
- 本文实例讲述了Android开发之绘制平面上的多边形功能。分享给大家供大家参考,具体如下:计算机里的3D图形其实是由很多个平面组合而成的。所
- 题目:求1+2!+3!+...+20!的和程序分析:此程序只是把累加变成了累乘。程序设计:public class Ex21 {  
- 今天同事写一个查询接口的时候,出错:元素内容必须由格式正确的字符数据或标记组成。错误原因:mybatis查询的时候,需要用到运算符 小于号:
- Android N 中推出了多窗口支持,项目要求适配多窗口模式,记录一下。1.生命周期:对于完全没有适配多窗口的APP来说,当启用多窗口模式
- 这篇文章主要介绍了java io读取文件操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 需要导入ant.jar包,apache网站(http://ant.apache.org/bindownload.cgi)下载即可。impor
- 前言:如果简单地拍照片并非您应用的主要目标,那么您可能希望从相机应用中获取图片并对该图片执行一些操作。一、这就是第一种方法,比较简单,不用将
- 一、校验分类数据的校验一般分为**前端校验、后端校验**二、前端校验前端校验是最为明显的,先说一下:① HTML非空校验 如 HTML5 新
- java中的JsonSerializer用法背景今天在写项目的时候遇到一个问题,项目中有个类中有创建时间和更新时间两个属性,但是单位在后端用