C#使用iTextSharp添加PDF水印

发布时间 - 2026-01-11 00:20:38    点击率:

使用的是iTextSharp添加PDF水印,由于是接口动态生成PDF,所以采用的是全部是内存流的形式,而且水印是平铺是。iTextSharp版本是5.5。

/// <summary>
    /// 添加倾斜水印
    /// </summary>
    /// <param name="pdfStream">pdf文件流</param>
    /// <param name="waterMarkName">水印字符串</param>
    /// <param name="width">页面宽度</param>
    /// <param name="height">页面高度</param>
    public MemoryStream SetWaterMark(MemoryStream pdfStream, string waterMarkName, float width, float height)
    {
      try
      {
        int fontSize = 50;//设置字体大小
        int span = 40;//设置垂直位移
        MemoryStream outStream = new MemoryStream();
        PdfReader pdfReader = new PdfReader(pdfStream);
        PdfStamper pdfStamper = new PdfStamper(pdfReader, outStream);
        pdfStamper.Writer.CloseStream = false;
        int total = pdfReader.NumberOfPages + 1;
        PdfContentByte content;
        BaseFont font = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\STCAIYUN.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);//华文云彩字体
        PdfGState gs = new PdfGState();
        gs.FillOpacity = 0.15f;//透明度
        int waterMarkNameLenth = waterMarkName.Length;
        char c;
        int rise = 0;
        string spanString = " ";//水平位移
        for (int i = 1; i < total; i++)
        {
          rise = waterMarkNameLenth * span;
          content = pdfStamper.GetOverContent(i);//在内容上方加水印
                              //content = pdfStamper.GetUnderContent(i);//在内容下方加水印
          content.SetGState(gs);
          content.BeginText();
          content.SetColorFill(BaseColor.GREEN);
          content.SetFontAndSize(font, fontSize);
          int heightNumbert = (int)Math.Ceiling((decimal)height / (decimal)rise);//垂直重复的次数,进一发
          int panleWith = (fontSize + span) * waterMarkNameLenth;
          int widthNumber = (int)Math.Ceiling((decimal)width / (decimal)panleWith);//水平重复次数
          
          // 设置水印文字字体倾斜 开始 
          for (int w = 0; w < widthNumber; w++)
          {
            for (int h = 1; h <= heightNumbert; h++)
            {
              int yleng = rise * h;
              content.SetTextMatrix(w * panleWith, yleng);//x,y设置水印开始的绝对左边,以左下角为x,y轴的起点
              for (int k = 0; k < waterMarkNameLenth; k++)
              {
                content.SetTextRise(yleng);//指定的y轴值处添加
                c = waterMarkName[k];
                content.ShowText(c + spanString);
                yleng -= span;
              }
            }
          }
          content.EndText();
        }
        if (pdfStamper != null)
          pdfStamper.Close();

        if (pdfReader != null)
          pdfReader.Close();

        return outStream;
      }
      catch (Exception ex)
      {
        throw ex;
      }
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# C#添加水印  # iTextSharp添加PDF水印  # C#添加文字水印  # C#利用iTextSharp组件给PDF文档添加图片/文字水印  # C#利用iTextSharp添加PDF水印  # C#使用iTextSharp设置PDF所有页面背景图功能实例  # C#使用iTextSharp从PDF文档获取内容的方法  # C#使用iTextSharp将PDF转成文本的方法  # C#使用iTextSharp封装的PDF文件操作类实例  # C#使用itextsharp生成PDF文件的实现代码  # C# 中使用iTextSharp组件创建PDF的简单方法  # C#使用iTextSharp操作PDF  # 的是  # 平铺  # 大家多多  # span  # outStream  # pdfReader 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  ,在苏州找工作,上哪个网站比较好?  Laravel如何自定义错误页面(404, 500)?(代码示例)  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  独立制作一个网站多少钱,建立网站需要花多少钱?  如何有效防御Web建站篡改攻击?  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Laravel如何创建自定义Facades?(详细步骤)  佛山企业网站制作公司有哪些,沟通100网上服务官网?  Python3.6正式版新特性预览  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  高性能网站服务器部署指南:稳定运行与安全配置优化方案  大型企业网站制作流程,做网站需要注册公司吗?  如何快速搭建高效服务器建站系统?  详解Android——蓝牙技术 带你实现终端间数据传输  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  iOS正则表达式验证手机号、邮箱、身份证号等  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  深入理解Android中的xmlns:tools属性  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  如何在云服务器上快速搭建个人网站?  Laravel模型事件有哪些_Laravel Model Event生命周期详解  北京的网站制作公司有哪些,哪个视频网站最好?  如何用好域名打造高点击率的自主建站?  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  高防服务器:AI智能防御DDoS攻击与数据安全保障  JS去除重复并统计数量的实现方法  Laravel如何使用Service Container和依赖注入?(代码示例)  焦点电影公司作品,电影焦点结局是什么?  使用豆包 AI 辅助进行简单网页 HTML 结构设计  Laravel如何自定义分页视图?(Pagination示例)  清除minerd进程的简单方法  如何为不同团队 ID 动态生成多个“认领值班”按钮  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法