-
VB.NET PDF 文档水印添加技术详解
VB.NET PDF 文档水印添加技术详解
在文档处理领域,给 PDF 文档添加水印是一种常见的需求,无论是为了保护文档版权还是增加文档的可识别性。本文将深入探讨如何使用 VB.NET 给 PDF 文档添加文本和图像水印,提供详细的实现步骤和代码示例。
一、使用 iTextSharp 添加文本水印
- 添加引用
在项目中添加对 iTextSharp 库的引用。可以通过 NuGet 包管理器安装 iTextSharp:
Install-Package iTextSharp
- 实现代码
Imports System.IO
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Module Module1
Sub Main()
Dim inputPath As String = "input.pdf"
Dim outputPath As String = "output.pdf"
Dim watermarkText As String = "CONFIDENTIAL"
AddTextWatermark(inputPath, outputPath, watermarkText)
End Sub
Sub AddTextWatermark(inputPath As String, outputPath As String, watermarkText As String)
Dim reader As New PdfReader(inputPath)
Dim stamper As PdfStamper = Nothing
Try
stamper = New PdfStamper(reader, New FileStream(outputPath, FileMode.Create))
Dim total As Integer = reader.NumberOfPages
Dim font As BaseFont = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
Dim color As BaseColor = BaseColor.LIGHT_GRAY
Dim fontSize As Single = 50.0F
Dim transparency As Single = 0.2F
For i As Integer = 1 To total
Dim contentByte As PdfContentByte = stamper.GetOverContent(i)
Dim pageSize As Rectangle = reader.GetPageSize(i)
Dim width As Single = pageSize.Width
Dim height As Single = pageSize.Height
contentByte.BeginText()
contentByte.SetFontAndSize(font, fontSize)
contentByte.SetColorFill(color)
contentByte.SetRenderingHint(RenderingHint.KEY_STROKE_WIDTH, 0.5F)
Dim textWidth As Single = font.GetWidthPoint(watermarkText, fontSize)
Dim textHeight As Single = fontSize
Dim x As Single = (width - textWidth) / 2
Dim y As Single = (height - textHeight) / 2
contentByte.ShowTextAligned(Element.ALIGN_CENTER, watermarkText, x + textWidth / 2, y + textHeight / 2, 45)
contentByte.EndText()
Next
Finally
If stamper IsNot Nothing Then
stamper.Close()
End If
reader.Close()
End Try
End Sub
End Module
- 代码说明
-
创建
PdfReader
对象读取输入的 PDF 文件。 -
创建
PdfStamper
对象用于在 PDF 上添加内容。 - 设置水印的字体、颜色、大小和透明度。
- 遍历 PDF 的每一页,在每一页上绘制水印文本。
- 保存修改后的 PDF 文件。
二、使用 iTextSharp 添加图像水印
- 实现代码
Imports System.IO
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports iTextSharp.text.pdf.parser
Module Module1
Sub Main()
Dim inputPath As String = "input.pdf"
Dim outputPath As String = "output.pdf"
Dim watermarkImage As String = "watermark.png"
AddImageWatermark(inputPath, outputPath, watermarkImage)
End Sub
Sub AddImageWatermark(inputPath As String, outputPath As String, watermarkImage As String)
Dim reader As New PdfReader(inputPath)
Dim stamper As PdfStamper = Nothing
Try
stamper = New PdfStamper(reader, New FileStream(outputPath, FileMode.Create))
Dim total As Integer = reader.NumberOfPages
Dim image As Image = Image.GetInstance(watermarkImage)
image.SetAbsolutePosition(50, 50)
image.ScalePercent(50)
For i As Integer = 1 To total
Dim contentByte As PdfContentByte = stamper.GetOverContent(i)
contentByte.AddImage(image)
Next
Finally
If stamper IsNot Nothing Then
stamper.Close()
End If
reader.Close()
End Try
End Sub
End Module
- 代码说明
-
创建
PdfReader
对象读取输入的 PDF 文件。 -
创建
PdfStamper
对象用于在 PDF 上添加内容。 - 加载水印图像并设置其位置和大小。
- 遍历 PDF 的每一页,在每一页上添加水印图像。
- 保存修改后的 PDF 文件。
三、使用 Spire.PDF 添加文本水印
- 添加引用
在项目中添加对 Spire.PDF 库的引用。可以通过 NuGet 包管理器安装 Spire.PDF:
Install-Package Spire.Pdf
- 实现代码
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Module Module1
Sub Main()
Dim inputPath As String = "input.pdf"
Dim outputPath As String = "output.pdf"
Dim watermarkText As String = "CONFIDENTIAL"
AddTextWatermark(inputPath, outputPath, watermarkText)
End Sub
Sub AddTextWatermark(inputPath As String, outputPath As String, watermarkText As String)
Dim pdf As New PdfDocument()
pdf.LoadFromFile(inputPath)
Dim font As New PdfTrueTypeFont(New Font("Arial", 50F), True)
Dim textSize As SizeF = font.MeasureString(watermarkText)
Dim offsetX As Single = (textSize.Width * Math.Sqrt(2)) / 4
Dim offsetY As Single = (textSize.Height * Math.Sqrt(2)) / 4
For Each page As PdfPageBase In pdf.Pages
page.Canvas.SetTransparency(0.8F)
page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offsetX - offsetY, page.Canvas.Size.Height / 2 + offsetX - offsetY)
page.Canvas.RotateTransform(-45)
page.Canvas.DrawString(watermarkText, font, PdfBrushes.LightGray, 0, 0)
Next
pdf.SaveToFile(outputPath)
End Sub
End Module
- 代码说明
-
创建
PdfDocument
对象并加载输入的 PDF 文件。 - 创建字体对象并设置水印文本。
- 计算水印文本的尺寸和偏移量。
- 遍历 PDF 的每一页,在每一页上绘制水印文本。
- 保存修改后的 PDF 文件。
四、总结
通过本文的介绍,您应该能够使用 VB.NET 给 PDF 文档添加文本和图像水印。无论是使用 iTextSharp 还是 Spire.PDF,都可以实现这一功能。在实际应用中,可以根据项目需求和库的特性选择合适的方法来实现 PDF 文档的水印添加。希望本文能够帮助您更好地理解和应用这一技术。
最后,如果你对python语言还有任何疑问或者需要进一步的帮助,请访问https://www.xin3721.com 本站原创,转载请注明出处:https://www.xin3721.com
栏目列表
最新更新
求1000阶乘的结果末尾有多少个0
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
SQL Server 中的数据类型隐式转换问题
SQL Server中T-SQL 数据类型转换详解
sqlserver 数据类型转换小实验
SQL Server数据类型转换方法
SQL Server 2017无法连接到服务器的问题解决
SQLServer地址搜索性能优化
Sql Server查询性能优化之不可小觑的书签查
SQL Server数据库的高性能优化经验总结
SQL SERVER性能优化综述(很好的总结,不要错
开启SQLSERVER数据库缓存依赖优化网站性能
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比