C#使用iTextSharp给PDF添加水印

  昨天利用itextsharp、Spire配合使用为pdf文档每页添加水印 发现公司的框架用的.netframework3.5。用上面那个方法,.netframework最低4.0,升级公司框架的版本,导致之前写过的代码报错地方比较多,所以网上找到了该方法,记录下来,支持.netframework3.5

类库下载:#

直接下载

引入类库#

 

 引入命名空间#

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

实现:#

复制代码
/// <summary>
/// 添加普通偏转角度文字水印
/// </summary>
public static void SetWatermark(string filePath, string text)
{
    PdfReader pdfReader = null;
    PdfStamper pdfStamper = null;
    string tempPath = Path.GetDirectoryName(filePath) + Path.GetFileNameWithoutExtension(filePath) + "_temp.pdf";

    try
    {
        pdfReader = new PdfReader(filePath);
        pdfStamper = new PdfStamper(pdfReader, new FileStream(tempPath, FileMode.Create));
        int total = pdfReader.NumberOfPages + 1;
        iTextSharp.text.Rectangle psize = pdfReader.GetPageSize(1);
        float width = psize.Width;
        float height = psize.Height;
        PdfContentByte content;
        BaseFont font = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        PdfGState gs = new PdfGState();
        for (int i = 1; i < total; i++)
        {
            content = pdfStamper.GetOverContent(i);//在内容上方加水印
            //content = pdfStamper.GetUnderContent(i);//在内容下方加水印
            //透明度
            gs.FillOpacity = 0.3f;
            content.SetGState(gs);
            //content.SetGrayFill(0.3f);
            //开始写入文本
            content.BeginText();
            content.SetColorFill(BaseColor.GRAY);
            content.SetFontAndSize(font, 30);
            content.SetTextMatrix(0, 0);
            content.ShowTextAligned(Element.ALIGN_CENTER, text, width - 120, height - 120, -45);
            //content.SetColorFill(BaseColor.BLACK);
            //content.SetFontAndSize(font, 8);
            //content.ShowTextAligned(Element.ALIGN_CENTER, waterMarkName, 0, 0, 0);
            content.EndText();
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        if (pdfStamper != null)
            pdfStamper.Close();

        if (pdfReader != null)
            pdfReader.Close();
        System.IO.File.Copy(tempPath, filePath, true);
        System.IO.File.Delete(tempPath);
    }
}
复制代码

 

posted @   陈彦斌  阅读(2786)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
主题色彩
点击右上角即可分享
微信分享提示