C#如何给PDF文件添加水印

下面是C#如何给PDF文件添加水印的完整攻略:

1. 使用 iTextSharp 添加水印到 PDF 文件中

步骤如下:

  1. 引用 iTextSharp 的 dll 文件。

C#
using iTextSharp.text;
using iTextSharp.text.pdf;

  1. 读取 PDF 文件并创建 PdfStamper 对象。

C#
PdfReader reader = new PdfReader("original.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileStream("watermark.pdf", FileMode.Create));

  1. 创建一个 PdfContentByte 对象,并设置字体、颜色和透明度。

C#
PdfContentByte content = stamper.GetOverContent(1);
BaseFont baseFont = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
content.SetFontAndSize(baseFont, 50);
content.SetColorFill(BaseColor.GRAY);
content.SetGState(new PdfGState { FillOpacity = 0.4f, StrokeOpacity = 0.4f });

  1. 在 PdfContentByte 对象上添加水印。

C#
float x = reader.GetPageSize(1).Width / 2;
float y = reader.GetPageSize(1).Height / 2;
content.BeginText();
content.ShowTextAligned(Element.ALIGN_CENTER, "Watermark", x, y, 45);
content.EndText();

  1. 关闭 PdfStamper 和 PdfReader。

C#
stamper.Close();
reader.Close();

这样,就可以在指定的 PDF 文件中添加水印了。

2. 使用 Spire.PDF 添加水印到 PDF 文件中

步骤如下:

  1. 引用 Spire.PDF 的 dll 文件。

C#
using Spire.Pdf;
using Spire.Pdf.Graphics;

  1. 加载 PDF 文件。

C#
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("original.pdf");

  1. 创建 PdfPageBase 对象,并设置字体、颜色和透明度。

C#
PdfPageBase page = pdf.Pages[0];
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 50f, PdfFontStyle.Bold);
PdfBrush brush = new PdfSolidBrush(Color.FromArgb(102, 192, 192, 192));

  1. 在 PdfPageBase 对象上添加水印。

C#
float x = page.Canvas.ClientSize.Width / 2;
float y = page.Canvas.ClientSize.Height / 2;
page.Canvas.SetTransparency(0.4f, 0.4f, PdfBlendMode.Multiply);
page.Canvas.DrawString("Watermark", font, brush, x, y, PdfStringFormat.GenericTypographic);

  1. 保存 PDF 文件。

C#
pdf.SaveToFile("watermark.pdf");
pdf.Close();

这样,就可以在指定的 PDF 文件中添加水印了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#如何给PDF文件添加水印 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • C#中SQL参数传入空值报错解决方案

    我们先从问题的背景说起:在使用C#编写带参数的SQL查询时,如果参数的值为null或者DBNull.Value,会出现“System.ArgumentNullException: Value cannot be null”的异常。接下来,我将介绍几种解决方案来避免这个问题。 方案一:使用IFNULL()函数 在SQL语句中使用IFNULL()函数可以在参数值…

    C# 2023年5月14日
    00
  • C# 基础入门–注释

    非常感谢你对C#基础学习的关注!注释是一种非常重要的编程元素,它能够加强代码的可读性、可维护性和可访问性。在本篇文章中,我将为您介绍如何在C#程序中使用注释,包括单行注释和多行注释。 单行注释 单行注释会在某一行的末尾添加标记符号“//”,表示该行后面的文字都是注释内容。例如,下面的代码演示了单行注释的使用: // 这是一个单行注释 int x = 5; /…

    C# 2023年6月7日
    00
  • 一个可用于生产项目 基于 .NET 6 自研ORM

    Fast Framework 作者 Mr-zhong 代码改变世界…. 一、前言 Fast Framework 基于NET6.0 封装的轻量级 ORM 框架 支持多种数据库 SqlServer Oracle MySql PostgreSql Sqlite 优点: 体积小、可动态切换不同实现类库、原生支持微软特性、流畅API、使用简单、性能高、模型数据绑定…

    C# 2023年4月22日
    00
  • Netcore磊科路由器无线MAC地址过滤图解教程

    Netcore磊科路由器无线MAC地址过滤图解教程如下: 步骤一:登录路由器 首先,需要登录到 Netcore 磊科路由器的管理界面。在浏览器中输入路由器的 IP 地址,然后输入用户名和密码进行登录。 步骤二:进入无线设置页面 在登录成功后,进入路由器的无线设置页面。在页面中找到“MAC地址过滤”选项,并点击进入。 步骤三:启用MAC地址过滤 在“MAC地址…

    C# 2023年5月17日
    00
  • C#用递归算法解决经典背包问题

    首先,需要明确背包问题的定义和思路: 经典背包问题(Knapsack Problem)指的是:给定一个背包,他的容量为C(Capacity)。现在有n种不同的物品,编号为0~n-1。其中每一件物品的重量为Wi,价值为Vi。问可以向这个背包中装入哪些物品,使得在满足背包最大容量的基础上,所有装入的物品的总价值最大。 解决该问题的思路主要有两种:贪心算法和动态规…

    C# 2023年6月1日
    00
  • c#中自定义Base16编码解码的方法示例

    针对你提供的主题,我会从以下几个方面进行详细讲解: Base16编码和解码是什么? C#内置的Base16编码和解码方法 自定义C#中的Base16编码和解码方法 示例说明 1. Base16编码和解码是什么? Base16(也称为hexadecimal)是一种将二进制数据编码为16进制字符串的方式,每个字节(8位)会转化为两个16进制数字(共16个)。 例…

    C# 2023年6月7日
    00
  • C#中判断本地系统的网络连接状态的方法

    C#中判断本地系统的网络连接状态有多种方法,以下是其中两种方法的详细讲解。 方法一:使用.NET Framework提供的System.Net.NetworkInformation命名空间中的NetworkInterface类。 步骤如下: 引用System.Net.NetworkInformation命名空间。 使用NetworkInterface类的Ge…

    C# 2023年6月7日
    00
  • C#实现自定义Dictionary类实例

    这里是C#实现自定义Dictionary类实例的完整攻略: 1. 创建自定义Dictionary类 首先,我们需要创建一个自定义的Dictionary类,我们可以参考.NET Framework中原有的Dictionary类的实现方式,但是需要添加一些自定义的功能。下面是一个基本的实现方式: public class MyDictionary<TKey…

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部