ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#/VB.NET 给PDF文档添加文本/图像水印

2022-07-04 10:03:58  阅读:200  来源: 互联网

标签:VB C# PdfDocument Canvas 水印 brush PDF page


当我们在网上共享PDF文件时,重要的是要让屏幕另一侧的人相信发布的信息是正确的。毕竟,任何文件都可以被攻击者截获并进行修改。带有你的标志或特定文本的水印 PDF 将证明文件的真实性,并为将要发送给的每个人证明其安全性。

我们将在本文中详细介绍应用水印PDF的方法。本文将分为三个部分,详细为您介绍如何通过 C#/VB.NET代码将文本/图像水印添加到PDF文档。想要实现此功能,只需执行几个简单的步骤。详情请阅读以下内容。

给PDF文档添加文本水印

向PDF添加多行文本水印

给PDF添加图像水印

 

程序环境:

本次测试时,在程序中引入 Spire.PDF.dll 文件。

 

方法 1:

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

 

方法 2:

通过 NuGet 安装。可通过以下 2 种方法安装:

 

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

 

  2. 将以下内容复制到 PM 控制台安装。

 

Install-Package FreeSpire.PDF -Version 8.6.0

 

给PDF文档添加文本水印

具体步骤:

  • 创建 PdfDocument 对象并用PdfDocument.LoadFromFile()方法加载示例文档。
  • 用PdfFontBase.MeasureString()方法设置水印文字和测量文字大小。
  • 浏览文档中的所有页面。
  • 使用 PdfPageBase.Canvas.TraslateTransform()方法将某个页面的坐标系平移指定坐标,使用 PdfPageBase.Canvas.RotateTransform() 方法将坐标系逆时针旋转 45 度。
  • 使用PdfPageBase.Canvas.DrawString()方法在页面上绘制水印文字。
  • 用PdfDocument.SaveToFile()方法保存为PDF文件。

完整代码:

【C#】

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");
        }
    }
}

【VB.NET】

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文件。

完整代码:

【C#】

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");
          
        }
    }
}

VB.NET

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() 方法将文档保存到文件中

完整代码

【C#】

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();
        }
    }
}

【VB.NET】

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

效果图:

 

标签:VB,C#,PdfDocument,Canvas,水印,brush,PDF,page
来源: https://www.cnblogs.com/Carina-baby/p/16441927.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有