首页 > 编程语言 >C# 图片转PDF,PDF增加水印文字

C# 图片转PDF,PDF增加水印文字

时间:2023-06-21 16:57:00浏览次数:36  
标签:rec C# text image 水印 iTextSharp new PDF document

  好久没写博客了,今天给大家分享一个图片转PDF的相关操作,也算是一次总结吧。

  首先需要准备动态库itextsharp.dll,这个dll去网上下载,都可以下载到,C#对PDF的操作都是基于这个类库来实现的。话不多说,直接上代码。

        /// <summary>
        /// 导出PDF
        /// </summary>
        /// <param name="FilePath">图片的路劲</param>
		/// <param name="FileName">图片的名称</param>
        private bool PrintToPdf(string FilePath,string FileName )
        {			

            iTextSharp.text.Rectangle rec = new iTextSharp.text.Rectangle(0, 0, iTextSharp.text.PageSize.A4.Width, iTextSharp.text.PageSize.A4.Height);
            iTextSharp.text.Image image;
            iTextSharp.text.Document document = null;
            FileStream fs = null;
            PdfWriter writer = null;
            try
            {
                //生成PDF
                document = new iTextSharp.text.Document(rec);
                fs = new FileStream(FilePath + FileName + ".pdf", FileMode.Create);

                PdfWriter.GetInstance(document, fs);
                document.Open();
                image = iTextSharp.text.Image.GetInstance(FilePath + FileName + ".jpg");
                //调整图片大小,使之适合A4
                if (image.Height > rec.Height)
                {
                    image.ScaleToFit(rec.Width, rec.Height);
                }
                else if (image.Width > rec.Width)
                {
                    image.ScaleToFit(rec.Width, rec.Height);
                }

                //调整图片位置,使之居中
                image.Alignment = iTextSharp.text.Image.ALIGN_MIDDLE;
                document.NewPage();
                document.Add(image);
            }
            catch (Exception ex)
            {
                return false;
            }
            finally
            {
                if (document.IsOpen())
                {
                    document.Close();
                }
                fs.Close();

                //最后删除生成的图片
                File.Delete(FilePath + FileName + ".jpg");
            }

            try
            {
                //添加水印图片,水印图片采取的是先生成图片,再添加到PDF文件中
                document = new iTextSharp.text.Document(rec);
                fs = new FileStream(FilePath + FileName + ".pdf", FileMode.Open);
                writer = PdfWriter.GetInstance(document, fs);
                iTextSharp.text.Image imgWater = CreateWaterImage();
                PdfReader reader = new PdfReader(fs);
                document.Open();
                PdfContentByte cb = writer.DirectContent;
                PdfImportedPage newPage;
                int iPageNum = reader.NumberOfPages;
                for (int j = 1; j <= iPageNum; j++)
                {
                    document.NewPage();
                    newPage = writer.GetImportedPage(reader, j);

                    //pdf旋转
                    if (newPage.Width > newPage.Height)
                    {
                        cb.AddTemplate(newPage, 0, -1f, 1f, 0, 0, newPage.Width);
                    }
                    else
                    {
                        cb.AddTemplate(newPage, 0, 0);
                    }
                    cb.AddImage(imgWater);
                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally
            {
                if (document.IsOpen())
                {
                    document.Close();
                }
                writer.Close();
                fs.Close();
            }
        }

        /// <summary>
        /// 生成水印图片
        /// </summary>
        /// <returns></returns>
        private iTextSharp.text.Image CreateWaterImage()
        {
            string WaterText = "水印文本";
            Bitmap bitmap = new Bitmap(595, 842);
            using (Graphics g = Graphics.FromImage(bitmap))
            {
                //重置图像
                g.ResetTransform();
                //设置旋转中心
                g.TranslateTransform(bitmap.Width / 2, bitmap.Height / 2);
                //旋转50度 顺时针
                g.RotateTransform(-50);
                //指定文本呈现的质量 解决文字锯齿问题
                g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
                System.Drawing.Font font = new System.Drawing.Font("微软雅黑", 14);
                SolidBrush solidBrush = new SolidBrush(Color.FromArgb(100, 0, 0, 0));

                //设置文字、字体、大小、颜色、起始位置
                g.DrawString(WaterText, font, solidBrush, new Point(-240, -100));

                g.DrawString(WaterText, font, solidBrush, new Point(-340, 100));
            }
			
			//把水印图片保存在系统指定位置
            bitmap.Save("C:\\WaterTemp.jpg");

            iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance("C:\\WaterTemp.jpg");
            //透明度,灰色填充
            image.GrayFill = 20;
            image.SetAbsolutePosition(0, 0);

            return image;
        }

  

标签:rec,C#,text,image,水印,iTextSharp,new,PDF,document
From: https://www.cnblogs.com/zhenzaizai/p/17496661.html

相关文章

  • 视频融合平台EasyCVR迁移数据库报错1146是什么原因?该如何解决?
    EasyCVR视频融合平台基于云边端协同架构,具有强大的数据接入、处理及分发能力。平台支持多协议接入,包括:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等,对外可分发多格式视频流,包括RTSP、RTMP、FLV、HLS、WebRTC等。我们在此前的文章中也介绍过关于EasyC......
  • ApplicationContext applicationContext 上下文 ApplicationListener
    ApplicationContextAware实现类在应用启动的时候就会初始化  对于ApplicationReadyEvent,官网的解释是:事件尽可能晚发布,以指示应用程序已准备好为请求提供服务。该事件的来源是SpringApplication本身,但要注意修改其内部状态,因为届时所有初始化步骤都将完成。顾名思义就是SpringA......
  • centos 安装mongodb
    在CentOS系统中安装MongoDB可以按照以下步骤进行:配置MongoDB的Yum仓库sudovi/etc/yum.repos.d/mongodb-org-4.4.repo在编辑器中输入以下内容:[mongodb-org-4.4]name=MongoDBRepositorybaseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.......
  • linux下安装Ipmi工具,调整服务器CPU风扇速度.
    安装ipmi工具yum-yinstallipmitool加载模块modprobeipmi_si&&modprobeipmi_devintf&&modprobeipmi_msghandler查看模块lsmod|grepipmi开启风扇控制设置风扇为手动模式ipmitoolraw0x300x300x010x0000为手动模式01为自动模式设置CPU风扇转速ipmit......
  • Python中的pickle模块:对象序列化与反序列化
    在Python中,对象的序列化和反序列化是一项常见的任务。pickle模块提供了一种简单且强大的方法来实现对象的序列化和反序列化,使得开发者能够方便地将复杂的Python对象转化为字节流并在需要时重新还原。本文将详细介绍pickle模块的使用方法和原理,并探讨其在数据持久化和跨进程通信中......
  • 【pywifi】Windows下import pywifi库报错:ModuleNotFoundError: No module named ‘com
    1、解决方法pipinstallcomtypes 参考链接:(88条消息)Windows下importpywifi库报错:ModuleNotFoundError:Nomodulenamed‘comtypes‘原因排查_广东上大分的博客-CSDN博客......
  • 时间序列转图像:符号递归图(Symbolic recurrence plots)(matlab版复现)
    符号递归图(Symbolicrecurrenceplots):是一种以为时间序列转图像技术,可用于平稳和非平稳数据集;对噪声具有鲁棒性,在一定的数据变换条件下具有不变性。结合深度学习技术可以解决能源电力,水利,天气,生物医学,交通等领域的复杂模式识别和监测任务。链接:https://mbd.pub/o/bread/mbd-ZJqY......
  • [C#] 使用代码打开网络适配器界面
    在win7以上系统中,进入网络适配器至少需要鼠标点击三下,对于网络设备调试非常不友好,需求在自己的diytools中添加一键打开功能System.Diagnostics.Process.Start("cmd.exe","/Ccontrol/nameMicrosoft.NetworkandSharingCenter");///C关闭窗体/K不关闭 可能需要......
  • TheRoleofSpatialPyramidalPoolinginConvolutionalNeuralNe
    目录1.引言2.技术原理及概念2.1.基本概念解释2.2.技术原理介绍2.3.相关技术比较3.实现步骤与流程3.1.准备工作:环境配置与依赖安装3.2.核心模块实现3.3.集成与测试4.示例与应用4.1.实例分析4.2.核心代码实现4.3.代码讲解说明4.4.应用场景介绍5.优化与改进5.1.性能优......
  • docker-compose部署资产管理系统Snipe-IT
    前提环境ubuntu22.04(不重要)安装好docker安装好docker-compose拉去镜像也可以部署的时候拉取mysqlsnipe-itdockerpullmysql:8.0dockerpullsnipe/snipe-it:v6.1.0这里咱们拉去的是最新版本参考文档链接官网环境变量说明文档容器部署参考文档下载官方源......