C#中pdf生成图片文字水印类的实现实例

这篇文章主要介绍了c#实现的pdf生成图片文字水印类,结合完整实例形式分析了c#针对pdf文件的创建、添加文字、水印等相关操作技巧,需要的朋友可以参考下

本文实例讲述了C#实现的pdf生成图片文字水印类。分享给大家供大家参考,具体如下:

public class PDFSetWaterMark{    ///     /// 创建一个显示指定图片的pdf    ///     ///     ///     ///     public static bool CreatePDFByPic(string picPdfPath, string picPath)    {      //新建一个文档      Document doc = new Document();      try      {        //建立一个书写器(Writer)与document对象关联        PdfWriter.GetInstance(doc, new FileStream(picPdfPath, FileMode.Create, FileAccess.ReadWrite));        //打开一个文档        doc.Open();        //向文档中添加内容        Image img = Image.GetInstance(picPath);        //img.SetAbsolutePosition();        doc.Add(img);        return true;      }      catch (Exception ex)      {        return false;        throw ex;      }      finally      {        if (doc != null)        {          doc.Close();        }      }    }    ///     /// 加图片水印    ///     ///     ///     ///     ///     ///     ///     public static bool PDFWatermark(string inputfilepath, string outputfilepath, string ModelPicName, float top, float left)    {      //throw new NotImplementedException();      PdfReader pdfReader = null;      PdfStamper pdfStamper = null;      try      {        pdfReader = new PdfReader(inputfilepath);        int numberOfPages = pdfReader.NumberOfPages;        iTextSharp.text.Rectangle psize = pdfReader.GetPageSize(1);        float width = psize.Width;        float height = psize.Height;        pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, FileMode.Create));        PdfContentByte waterMarkContent;        iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(ModelPicName);        image.GrayFill = 20;//透明度,灰色填充        //image.Rotation//旋转        //image.RotationDegrees//旋转角度        //水印的位置        if (left < 0)        {          left = width / 2 - image.Width + left;        }        //image.SetAbsolutePosition(left, (height - image.Height) - top);        image.SetAbsolutePosition(left, (height / 2 - image.Height) - top);        //每一页加水印,也可以设置某一页加水印        for (int i = 1; i <= numberOfPages; i++)        {          //waterMarkContent = pdfStamper.GetUnderContent(i);//内容下层加水印          waterMarkContent = pdfStamper.GetOverContent(i);//内容上层加水印          waterMarkContent.AddImage(image);        }        //strMsg = "success";        return true;      }      catch (Exception ex)      {        throw ex;      }      finally      {        if (pdfStamper != null)          pdfStamper.Close();        if (pdfReader != null)          pdfReader.Close();      }    }    ///     /// 添加普通偏转角度文字水印    ///     ///     ///     ///     ///     public static void setWatermark(string inputfilepath, string outputfilepath, string waterMarkName)    {      PdfReader pdfReader = null;      PdfStamper pdfStamper = null;      try      {        pdfReader = new PdfReader(inputfilepath);        pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, 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.LIGHT_GRAY);          content.SetFontAndSize(font, 100);          content.SetTextMatrix(0, 0);          content.ShowTextAligned(Element.ALIGN_CENTER, waterMarkName, width / 2 - 50, height / 2 - 50, 55);          //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();      }    }    ///     /// 添加倾斜水印    ///     ///     ///     ///     ///     ///     ///     public static void setWatermark(string inputfilepath, string outputfilepath, string waterMarkName, string userPassWord, string ownerPassWord, int permission)    {      PdfReader pdfReader = null;      PdfStamper pdfStamper = null;      try      {        pdfReader = new PdfReader(inputfilepath);        pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, FileMode.Create));        // 设置密码        //pdfStamper.SetEncryption(false,userPassWord, ownerPassWord, permission);        int total = pdfReader.NumberOfPages + 1;        PdfContentByte content;        BaseFont font = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);        PdfGState gs = new PdfGState();        gs.FillOpacity = 0.2f;//透明度        int j = waterMarkName.Length;        char c;        int rise = 0;        for (int i = 1; i = 15)          {            content.SetTextMatrix(200, 120);            for (int k = 0; k < j; k++)            {              content.SetTextRise(rise);              c = waterMarkName[k];              content.ShowText(c + "");              rise -= 20;            }          }          else          {            content.SetTextMatrix(180, 100);            for (int k = 0; k < j; k++)            {              content.SetTextRise(rise);              c = waterMarkName[k];              content.ShowText(c + "");              rise -= 18;            }          }          // 字体设置结束          content.EndText();          // 画一个圆          //content.Ellipse(250, 450, 350, 550);          //content.SetLineWidth(1f);          //content.Stroke();        }      }      catch (Exception ex)      {        throw ex;      }      finally      {        if (pdfStamper != null)          pdfStamper.Close();        if (pdfReader != null)          pdfReader.Close();      }    }}

以上就是C#中pdf生成图片文字水印类的实现实例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1432707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 08:31:31
下一篇 2025年12月17日 08:31:41

相关推荐

  • 真我 realme 手机全球累计出货量突破 3 亿台,7 年实现跨越式增长

    8 月 5 日消息,真我(realme)副总裁、全球营销总裁及中国区负责人徐起在社交平台透露:真我手机全球累计销量已正式突破 3 亿台。这一里程碑式的成就,标志着这家仅成立七年的智能手机品牌再度刷新行业纪录,迈入全新的发展阶段。 真我 realme 始于 2018 年,始终坚持“敢越级”的品牌理念,…

    2026年9月10日
    100
  • 阿里吴泳铭最新演讲:实现超级人工智能 ASI 的三个阶段

    阿里吴泳铭最新演讲:实现超级人工智能 ASI 的三个阶段阿里吴泳铭最新演讲:实现超级人工智能 ASI 的三个阶段阿里吴泳铭最新演讲:实现超级人工智能 ASI 的三个阶段阿里吴泳铭最新演讲:实现超级人工智能 ASI 的三个阶段

    9 月 24 日,在杭州召开的云栖大会上,阿里巴巴集团 ceo、阿里云智能集团董事长兼 ceo 吴泳铭发表主旨演讲,他认为实现通用人工智能 agi 已是确定性事件,但这只是起点,终极目标是发展出能自我迭代、全面超越人类的超级人工智能 asi。 吴泳铭首次系统阐述了通往 ASI 的三阶段演进路线: 第…

    2026年9月9日 用户投稿
    200
  • Swoole进阶:掌握事件循环机制与实现

    随着web应用变得越来越复杂,对持续高并发和低延迟的需求也越来越高。这意味着传统的请求-响应式编程模型已经无法满足需求。这时候,异步编程和事件驱动编程就成为了非常重要的工具,swoole提供了这两种编程模型的支持。这篇文章将介绍swoole的事件循环机制以及如何实现它。 什么是事件循环?事件循环是一…

    用户投稿 2026年9月7日
    000
  • 如何使用ThinkPHP6实现邮件发送

    随着电子邮件在日常生活中的广泛应用,很多网站和应用程序都需要实现邮件发送功能。thinkphp6提供了很方便的方式来实现邮件发送功能,并且支持多种邮件服务商。 本文将介绍如何使用ThinkPHP6框架来实现邮件发送功能。 配置邮件发送参数 ThinkPHP6的邮件发送功能需要在应用的.env文件中配…

    用户投稿 2026年9月7日
    100
  • 如何使用ThinkPHP6实现拦截器

    随着互联网技术的不断发展和应用,网站的访问量越来越大。为了保证网站的稳定性和安全性,我们需要添加各种安全层面的保护。拦截器是其中一个非常实用的技术手段,它可以在用户访问某个页面之前拦截请求,进行特定的处理,从而达到控制访问权限的目的。本文将介绍如何使用thinkphp6实现拦截器。 环境准备 在开始…

    用户投稿 2026年9月7日
    100
  • 利用ThinkPHP6实现云存储

    在当下的互联网应用中,对于文件存储和传输的需求越来越高。云存储成为了一种越来越流行的解决方案,本文将介绍如何利用thinkphp6框架实现云存储。 一、什么是云存储 云存储是将数据存储在云计算平台上的一种方式,它可以在不同的设备之间进行数据共享和传输。相较于传统的本地存储方式,云存储具有以下几个优势…

    用户投稿 2026年9月7日
    000
  • 如何使用ThinkPHP6实现动态路由

    thinkphp6是一个开源的php框架,它提供了许多便捷的功能来帮助开发者快速构建web应用程序。其中一个强大的功能就是动态路由。本文将介绍如何使用thinkphp6实现动态路由。 什么是动态路由? 路由是指将URL请求映射到应用程序的特定部分的过程。在静态路由中,URL路径与应用程序的路由规则一…

    用户投稿 2026年9月7日
    000
  • 如何使用ThinkPHP6实现敏捷开发

    随着互联网的快速发展,软件开发行业也在迅速地变化着。在如此快节奏的行业中,敏捷开发成为越来越受欢迎的一种开发模式。而在敏捷开发中,快速适应变化和追求高效率成为了必备的能力,这也需要有一种高效的开发框架来支持。 ThinkPHP6是近年来特别受欢迎的PHP开发框架之一。在ThinkPHP6框架中,封装…

    用户投稿 2026年9月7日
    000
  • 如何使用ThinkPHP6实现免登陆

    thinkphp6是一款流行的php框架,它提供了强大的工具和功能来帮助开发人员快速构建web应用程序。其中,实现免登陆功能在许多应用中都非常重要。 本文将介绍如何使用ThinkPHP6实现免登陆功能,并探讨一些最佳实践和技巧。 一、理解免登陆的基本原理 在免登陆的过程中,我们需要了解一些基本的原理…

    用户投稿 2026年9月7日
    100
  • 用ThinkPHP6实现单元测试

    thinkphp是一款非常流行的php开发框架,它具有开发效率高、学习成本低、灵活性强等优点。对于一个优秀的开发团队来说,单元测试是保证代码质量的一种必要手段。本篇文章将介绍如何使用thinkphp6框架进行单元测试,以提高项目的稳定性和开发效率。 一、什么是单元测试? 单元测试是指对软件中的最小可…

    用户投稿 2026年9月7日
    000
  • 利用ThinkPHP6实现伪静态

    随着互联网的快速发展,网站的建设越来越受到人们的关注。而众所周知,优化网站的seo能够提高网站的排名及流量,并且伪静态就是网站seo优化中不可或缺的一部分。在这篇文章中,我们将会利用thinkphp6实现伪静态,并且进一步探讨伪静态的优化和实现过程。 什么是伪静态? 在讲解伪静态实现之前,先来了解一…

    用户投稿 2026年9月6日
    000
  • 如何使用ThinkPHP6实现无限滚动

    随着互联网的不断发展,无限滚动已成为现代网页设计的一种重要元素。无限滚动效果可以帮助提高用户体验,让用户可以更轻松地获取信息,提高用户粘性。本文将介绍如何使用thinkphp6框架实现无限滚动效果。 引入jQuery框架 在实现无限滚动之前,首先需要引入jQuery框架。可以使用CDN来加速访问速度…

    用户投稿 2026年9月6日
    000
  • 使用ThinkPHP6实现多语言功能

    随着互联网的不断发展,越来越多的网站和应用程序需要支持多语言功能,以便更好地服务全球用户。在web开发中,thinkphp是一款非常优秀的php框架,它内置了多语言支持功能,可以让开发者轻松实现多语言应用程序。本文将介绍如何使用thinkphp6框架实现多语言功能。 一、多语言配置 在ThinkPH…

    用户投稿 2026年9月6日
    000
  • 如何使用ThinkPHP6实现分布式系统

    随着互联网的发展,越来越多的企业和组织开始使用分布式系统来支持其业务需求。分布式系统是指由多个互相独立的计算机系统集成在一起,共同完成一些任务或处理一些数据,整个系统看起来就像是一个单一的计算机系统。 在Web应用程序中,ThinkPHP是一个非常流行的PHP框架。ThinkPHP6是其最新的版本,…

    用户投稿 2026年9月6日
    100
  • 利用ThinkPHP6实现消息队列

    随着互联网及大数据时代的到来,消息队列成为了业务开发和数据处理中不可或缺的一部分。而在php领域,thinkphp框架一直是开发者们的热门选择。本文将介绍如何利用thinkphp6实现消息队列,并为大家提供一些实用的代码实例。 安装消息队列扩展 在开始制作消息队列之前,我们需要安装一个消息队列扩展(…

    用户投稿 2026年9月6日
    000
  • 华为手机截屏攻略:快速实现!

    在当今社会,手机已经成为我们生活中不可或缺的一部分。而作为手机功能之一的截屏功能,更是我们在日常使用中经常遇到的操作。对于华为手机用户来说,如何快速实现截屏操作,是一个很重要的技能。本文将为大家分享华为手机截屏的攻略,让您轻松掌握这项技能。 首先,让我们来了解一下华为手机截屏的几种方式: 普通方式:…

    用户投稿 2026年9月5日
    000
  • 什么是NFS?分享在CentOS7上实现NFS共享

    一.介绍 NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,功能是让客户端通过网络访问不同主机上磁盘里的数据,主要用在类Unix系统上实现文件共享的一种方法。 NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用 (Remote…

    用户投稿 2026年9月5日
    100
  • 如何在华为手机上实现微信分身功能

    如何在华为手机上实现微信分身功能 随着社交软件的普及和人们对隐私安全的日益重视,微信分身功能逐渐成为人们关注的焦点。微信分身功能可以帮助用户在同一台手机上同时登录多个微信账号,方便管理和使用。在华为手机上实现微信分身功能并不困难,只需要按照以下步骤操作即可。 第一步:确保手机系统版本和微信版本符合要…

    用户投稿 2026年9月5日
    000
  • 如何在Swoole中实现TCP长连接

    随着互联网的飞速发展,tcp协议的应用越来越广泛,特别是在网络游戏、即时通讯、金融交易等领域中,tcp长连接更是不可或缺。swoole作为一款高性能的php网络通信框架,自然也能够完美地支持tcp长连接,本篇文章将分享如何在swoole中实现tcp长连接。 一、Swoole的TCP长连接 在Swoo…

    用户投稿 2026年9月5日
    000
  • 如何利用Laravel实现定时任务功能

    如何利用Laravel实现定时任务功能 引言:在开发应用程序时,有时需要在特定的时间点或间隔执行一些任务,例如生成报表、发送电子邮件或清理缓存。Laravel提供了一个强大的定时任务功能,可以帮助我们轻松地实现这些需求。本文将介绍如何使用Laravel中的定时任务功能,并提供具体的代码示例。 一、配…

    2026年9月2日
    500

发表回复

登录后才能评论
关注微信