当前位置:网站首页>在PDF中插入文本水印
在PDF中插入文本水印
2022-07-28 16:25:00 【InfoQ】
C#/VB.NET:在PDF文档中插入文本水印
安装 Spire.PDF for .NET
为PDF添加单行文本水印
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace AddTextWatermarkToPdf
{
class Program
{
static void Main(string[] args)
{
//创建PdfDocument类的对象
PdfDocument pdf = new PdfDocument();
//加载一个PDF文档实例
pdf.LoadFromFile(@"sample.pdf");
//创建PdfTrueTypeFont类的对象
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 55f), true);
//设置水印的文本内容
string text = "请勿盗用";
//设置文本水印大小
SizeF textSize = font.MeasureString(text);
//计算两个偏移变量的值,用于计算坐标系的平移量
float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);
//遍历文档中所有页面
foreach (PdfPageBase page in pdf.Pages)
{
//设置页面透明度
page.Canvas.SetTransparency(0.8f);
//将坐标系统平移到右下角
page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2);
//将坐标系逆时针旋转45度
page.Canvas.RotateTransform(-45);
//在页面上绘制文本水印
page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0);
}
//保存更改到另一个文件
pdf.SaveToFile("TextWatermark.pdf");
}
}
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
Namespace AddTextWatermarkToPdf
Class Program
Shared Sub Main(ByVal args() As String)
'创建PdfDocument类的对象
Dim pdf As PdfDocument = New PdfDocument()
'加载一个PDF文档实例
pdf.LoadFromFile("C: sample.pdf")
'创建PdfTrueTypeFont类的对象
Dim font As PdfTrueTypeFont = New PdfTrueTypeFont(New Font("宋体",55f),True)
'设置水印的文本内容
Dim text As String = "请勿盗用"
'设置文本水印大小
Dim textSize As SizeF = font.MeasureString(text)
'计算两个偏移变量的值,用于计算坐标系的平移量
Dim offset1 As single = CType((textSize.Width * System.Math.Sqrt(2) / 4), single)
Dim offset2 As single = CType((textSize.Height * System.Math.Sqrt(2) / 4), single)
'遍历文档中所有页面
Dim page As PdfPageBase
For Each page In pdf.Pages
'设置页面透明度
page.Canvas.SetTransparency(0.8f)
'将坐标系统平移到右下角
page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2)
'将坐标系逆时针旋转45度
page.Canvas.RotateTransform(-45)
'在页面上添绘制文本水印
page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0)
Next
'保存更改到另一个文件
pdf.SaveToFile("TextWatermark.pdf")
End Sub
End Class
End Namespace

为PDF添加多行文本水印
using System;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace AddMultiLineTextWatermark
{
class Program
{
static void Main(string[] args)
{
//创建PdfDocument类的对象
PdfDocument pdf = new PdfDocument();
//加载一个PDF文档
pdf.LoadFromFile(@"sample.pdf");
//创建PdfTrueTypeFont类的对象
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 20f), true);
//遍历文档页面
for (int i = 0; i < pdf.Pages.Count; i++)
{
//在特定页面上添加文本水印
InsertTextWatermark(pdf.Pages[i], "请勿复制", font, 3, 3);
}
//保存文件
pdf.SaveToFile("MultiLineTextWaterMark.pdf");
System.Diagnostics.Process.Start("MultiLineTextWaterMark.pdf");
}
static void InsertTextWatermark(PdfPageBase page, String watermarkText, PdfTrueTypeFont font, int rowNum, int columnNum)
{
//设置文本水印大小
SizeF textSize = font.MeasureString(watermarkText);
//计算两个偏移变量的值,用于计算坐标系的平移量
float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);
//创建平铺画刷
PdfTilingBrush brush = new PdfTilingBrush(new SizeF(page.ActualSize.Width / columnNum, page.ActualSize.Height / rowNum));
brush.Graphics.SetTransparency(0.5f);
brush.Graphics.Save();
brush.Graphics.TranslateTransform(brush.Size.Width / 2 - offset1 - offset2, brush.Size.Height / 2 + offset1 - offset2);
brush.Graphics.RotateTransform(-45);
//在平铺画刷绘制文本水印
brush.Graphics.DrawString(watermarkText, font, PdfBrushes.Violet, 0, 0);
brush.Graphics.Restore();
//使用平铺画刷绘制一个覆盖整个页面的矩形
page.Canvas.DrawRectangle(brush, new RectangleF(new PointF(0, 0), page.ActualSize));
}
}
}
Imports System
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
Namespace AddMultiLineTextWatermark
Class Program
Shared Sub Main(ByVal args() As String)
'创建PdfDocument类的对象
Dim pdf As PdfDocument = New PdfDocument()
'加载一个PDF文档
pdf.LoadFromFile("sample.pdf")
'创建PdfTrueTypeFont类的对象
Dim font As PdfTrueTypeFont = New PdfTrueTypeFont(New Font("宋体",20f),True)
'遍历文档页面
Dim i As Integer
For i = 0 To pdf.Pages.Count- 1 Step i + 1
'在特定页面上添加文本水印
InsertTextWatermark(pdf.Pages(i), "请勿复制", font, 3, 3)
Next
'保存文件
pdf.SaveToFile("MultiLineTextWaterMark.pdf")
System.Diagnostics.Process.Start("MultiLineTextWaterMark.pdf")
End Sub
Shared Sub InsertTextWatermark(ByVal page As PdfPageBase, ByVal watermarkText As String, ByVal font As PdfTrueTypeFont, ByVal rowNum As Integer, ByVal columnNum As Integer)
'设置文本水印大小
Dim textSize As SizeF = font.MeasureString(watermarkText)
'计算两个偏移变量的值,用于计算坐标系的平移量
float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);
'创建一个平铺画刷
Dim brush As PdfTilingBrush = New PdfTilingBrush(New SizeF(page.ActualSize.Width / columnNum,page.ActualSize.Height / rowNum))
brush.Graphics.SetTransparency(0.5f)
brush.Graphics.Save()
brush.Graphics.TranslateTransform(brush.Size.Width / 2 - offset1 - offset2, brush.Size.Height / 2 + offset1 - offset2)
brush.Graphics.RotateTransform(-45)
'在平铺画刷上绘制文本水印
brush.Graphics.DrawString(watermarkText, font, PdfBrushes.Violet, 0, 0)
brush.Graphics.Restore()
'使用平铺画刷绘制一个覆盖整个页面的矩形
page.Canvas.DrawRectangle(brush, New RectangleF(New PointF(0, 0), page.ActualSize))
End Sub
End Class
End Namespace

边栏推荐
- Linear algebra and matrix theory (VIII)
- Leetcode 2022.04.10 China Merchants Bank special competition D. store promotion (DP)
- 线性代数及矩阵论(十)
- The practice of beego framework developed by goweb: Section 4 database configuration and connection
- 堡垒机的作用
- Verilog daily question (vl28 plus and minus counter)
- 2021年4月份自考
- 【kibana】问题整理 kibana 7.x No indices match pattern “apm-*“
- 微信小程序现金红包返回“IP地址非你在商户平台设置的可用IP地址”错误终极解决方法
- 带参数的微信小程序二维码生成
猜你喜欢

Proof of the third scene (f) in 22 years

The practice of the beego framework of goweb development: Section II project initialization configuration

Visual studio 2012/2015 releases web applications together with.Cs source code

Verilog 每日一题 (VL30 RAM的简单实现)

高速电路中电感的选型和应用

Verilog daily question (vl26 simple stopwatch)

The practice of beego framework developed by goweb: Section 4 database configuration and connection

net框架

Wechat applet cash red packet returns the error "the IP address is not the available IP address you set on the merchant platform". The ultimate solution

Reasoning Over Semantic-Level Graph for Fact Checking
随机推荐
Learn about service discovery in kubernetes
Visual Studio 2015 团队开发之Azure DevOps篇
Algorithm learning: leetcode interview question 09. implement queue with two stacks
Round 1C 2022 - Code jam 2022 b.square (Mathematics, thinking)
Verilog 每日一题(VL14 自动贩售机1--FSM常见题型)
Selection of resistance in high speed circuit
Verilog 每日一题 (VL24 多bit MUX同步器 跨时域输出)
Verilog 每日一题 (VL5 信号发生器)
CNSA与CASC和CASIC的区别
【presto 】presto 新版本升级详情
22年多校第三场(F的证明
The actual combat of the beego framework of goweb development: Section III program execution process analysis
零基础利用Unity3D开发AR应用并远程下载3D模型
2021年4月份自考
2022 Niuke multi school second CDE
Goweb开发之Beego框架实战:第四节 数据库配置及连接
部分情况下Error:(xx, xx) Failed to resolve: xxxxxx解决。
Shell编程之Sed
线性代数及矩阵论(七)
异步电路设计--同步脉冲器原理及例题