当前位置:网站首页>C#/VB.NET 给PDF文档添加文本/图像水印
C#/VB.NET 给PDF文档添加文本/图像水印
2022-07-06 10:41:00 【InfoQ】
给PDF文档添加文本水印
- 创建 PdfDocument 对象并用PdfDocument.LoadFromFile()方法加载示例文档。
- 用PdfFontBase.MeasureString()方法设置水印文字和测量文字大小。
- 浏览文档中的所有页面。
- 使用 PdfPageBase.Canvas.TraslateTransform()方法将某个页面的坐标系平移指定坐标,使用 PdfPageBase.Canvas.RotateTransform() 方法将坐标系逆时针旋转 45 度。
- 使用PdfPageBase.Canvas.DrawString()方法在页面上绘制水印文字。
- 用PdfDocument.SaveToFile()方法保存为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("Arial", 50f), true);
//设置水印文本
string text = "CONFIDENTIAL";
//测量文本尺寸
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
Private 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("Arial", 50!), true)
'设置水印文本
Dim text As String = "CONFIDENTIAL"
'测量文本尺寸
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)
'浏览文档中的所有页面。
For Each page As PdfPageBase In pdf.Pages
'设置页面透明度
page.Canvas.SetTransparency(0.8!)
'通过指定坐标平移坐标系
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添加多行文本水印
- 创建PDF文档并用PdfDocument. LoadFromFile()方法加载文件。
- 获取第一页。
- 绘制文字水印。 使用 PdfCanvas.TranslateTransform() 方法设置文本大小。 使用PdfCanvas.RotateTransform()方法设置字体角度。并使用 PdfCanvas.DrawString() 方法绘制您想要的文本内容。
- 使用 PdfDocument.SaveToFile() 方法将文档保存到新的PDF文件。
using System.Drawing;
using Spire.Pdf;
using Spire.Pdf.Graphics;
namespace TextWaterMark
{
class Program
{
static void Main(string[] args)
{
//创建PDF文档并加载文件
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("Sample1.pdf");
//获取第一页
PdfPageBase page = doc.Pages[0];
//绘制文字水印
PdfTilingBrush brush
= new PdfTilingBrush(new SizeF(page.Canvas.ClientSize.Width / 2, page.Canvas.ClientSize.Height / 3));
brush.Graphics.SetTransparency(0.3f);
brush.Graphics.Save();
brush.Graphics.TranslateTransform(brush.Size.Width / 2, brush.Size.Height / 2);
brush.Graphics.RotateTransform(-45);
brush.Graphics.DrawString("internal use",
new PdfFont(PdfFontFamily.Helvetica, 24), PdfBrushes.Violet, 0, 0,
new PdfStringFormat(PdfTextAlignment.Center));
brush.Graphics.Restore();
brush.Graphics.SetTransparency(1);
page.Canvas.DrawRectangle(brush, new RectangleF(new PointF(0, 0), page.Canvas.ClientSize));
//保存为PDF文件
doc.SaveToFile("TextWaterMark1.pdf");
}
}
}
Imports System.Drawing
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Namespace TextWaterMark
Class Program
Private Shared Sub Main(ByVal args() As String)
'创建PDF文档并加载文件
Dim doc As PdfDocument = New PdfDocument
doc.LoadFromFile("Sample1.pdf")
'获取第一页
Dim page As PdfPageBase = doc.Pages(0)
'绘制文字水印
Dim brush As PdfTilingBrush = New PdfTilingBrush(New SizeF((page.Canvas.ClientSize.Width / 2), (page.Canvas.ClientSize.Height / 3)))
brush.Graphics.SetTransparency(0.3!)
brush.Graphics.Save
brush.Graphics.TranslateTransform((brush.Size.Width / 2), (brush.Size.Height / 2))
brush.Graphics.RotateTransform(-45)
brush.Graphics.DrawString("internal use", New PdfFont(PdfFontFamily.Helvetica, 24), PdfBrushes.Violet, 0, 0, New PdfStringFormat(PdfTextAlignment.Center))
brush.Graphics.Restore
brush.Graphics.SetTransparency(1)
page.Canvas.DrawRectangle(brush, New RectangleF(New PointF(0, 0), page.Canvas.ClientSize))
'保存为PDF文件
doc.SaveToFile("TextWaterMark1.pdf")
End Sub
End Class
End Namespace
给PDF添加图像水印
- 创建一个PdfDocument 对象并使用PdfDocument.LoadFromFile() 方法加载一个示例PDF 文档。
- 使用 Image.FromFile() 方法加载图像。
- 获取图片尺寸。
- 循环浏览文档中的页面,通过PdfDocument.Pages() 属性获取具体页面。
- 通过PdfPageBase.BackgroundImage 属性设置图片为当前页面的水印图片。通过 PdfPageBase.BackgroundRegion 属性设置图像位置和大小。
- 使用 PdfDocument.SaveToFile() 方法将文档保存到文件中。
using Spire.Pdf;
using System.Drawing;
namespace AddImageWatermark
{
class Program
{
static void Main(string[] args)
{
//创建一个PdfDocument 对象
PdfDocument document = new PdfDocument();
//加载一个示例PDF 文档
document.LoadFromFile("sample.pdf");
//加载图像
Image image = Image.FromFile("logo.png");
//获取图片尺寸
int imgWidth = image.Width;
int imgHeight = image.Height;
//浏览文档中的页面
for (int i = 0; i < document.Pages.Count; i++)
{
//获取页面宽高
float pageWidth = document.Pages[i].ActualSize.Width;
float pageHeight = document.Pages[i].ActualSize.Height;
//设置背景不透明度
document.Pages[i].BackgroudOpacity = 0.3f;
//设置图片为当前页面的水印图片
document.Pages[i].BackgroundImage = image;
//将背景图片放在页面的中心
Rectangle rect = new Rectangle((int)(pageWidth - imgWidth) / 2, (int)(pageHeight - imgHeight) / 2, imgWidth, imgHeight);
document.Pages[i].BackgroundRegion = rect;
}
//将文档保存为PDF文件
document.SaveToFile("AddImageWatermark.pdf");
document.Close();
}
}
}
Imports Spire.Pdf
Imports System.Drawing
Namespace AddImageWatermark
Class Program
Private Shared Sub Main(ByVal args() As String)
'创建一个PdfDocument 对象
Dim document As PdfDocument = New PdfDocument
'加载一个示例PDF 文档
document.LoadFromFile("sample.pdf")
'加载图像
Dim image As Image = Image.FromFile("logo.png")
'获取图片尺寸
Dim imgWidth As Integer = image.Width
Dim imgHeight As Integer = image.Height
'浏览文档中的页面
Dim i As Integer = 0
Do While (i < document.Pages.Count)
'获取页面宽高
Dim pageWidth As Single = document.Pages(i).ActualSize.Width
Dim pageHeight As Single = document.Pages(i).ActualSize.Height
'设置背景不透明度
document.Pages(i).BackgroudOpacity = 0.3!
'设置图片为当前页面的水印图片
document.Pages(i).BackgroundImage = image
'将背景图片放在页面的中心
Dim rect As Rectangle = New Rectangle((CType((pageWidth - imgWidth),Integer) / 2), (CType((pageHeight - imgHeight),Integer) / 2), imgWidth, imgHeight)
document.Pages(i).BackgroundRegion = rect
i = (i + 1)
Loop
'将文档保存为PDF文件
document.SaveToFile("AddImageWatermark.pdf")
document.Close
End Sub
End Class
End Namespace
边栏推荐
- Blue Bridge Cup real question: one question with clear code, master three codes
- 从交互模型中蒸馏知识!中科大&美团提出VIRT,兼具双塔模型的效率和交互模型的性能,在文本匹配上实现性能和效率的平衡!...
- epoll()无论涉及wait队列分析
- 首先看K一个难看的数字
- With the implementation of MapReduce job de emphasis, a variety of output folders
- atcoder它A Mountaineer
- [Sun Yat sen University] information sharing of postgraduate entrance examination and re examination
- [swoole series 2.1] run the swoole first
- Test 1234
- 图片缩放中心
猜你喜欢
Excellent open source fonts for programmers
徐翔妻子应莹回应“股评”:自己写的!
Implementation of queue
Compilation Principle -- C language implementation of prediction table
2019 Alibaba cluster dataset Usage Summary
Blue Bridge Cup real question: one question with clear code, master three codes
阿里云国际版ECS云服务器无法登录宝塔面板控制台
Comparative examples of C language pointers *p++, * (p++), * ++p, * (++p), (*p) + +, +(*p)
测试行业的小伙伴,有问题可以找我哈。菜鸟一枚~
Distiller les connaissances du modèle interactif! L'Université de technologie de Chine & meituan propose Virt, qui a à la fois l'efficacité du modèle à deux tours et la performance du modèle interacti
随机推荐
Introduction to the use of SAP Fiori application index tool and SAP Fiori tools
Xu Xiang's wife Ying Ying responded to the "stock review": she wrote it!
Cobra quick start - designed for command line programs
44 colleges and universities were selected! Publicity of distributed intelligent computing project list
Compilation Principle -- C language implementation of prediction table
287. 寻找重复数
C language exchanges two numbers through pointers
UDP protocol: simple because of good nature, it is inevitable to encounter "city can play"
Introduction and case analysis of Prophet model
Self supervised heterogeneous graph neural network with CO comparative learning
【中山大学】考研初试复试资料分享
随着MapReduce job实现去加重,多种输出文件夹
On time and parameter selection of asemi rectifier bridge db207
C语言自动预订飞机票问题
Cobra 快速入门 - 专为命令行程序而生
With the implementation of MapReduce job de emphasis, a variety of output folders
推荐好用的后台管理脚手架,人人开源
Common - magic number 7
Stm32+esp8266+mqtt protocol connects onenet IOT platform
MS-TCT:Inria&SBU提出用于动作检测的多尺度时间Transformer,效果SOTA!已开源!(CVPR2022)...