• C# PDF添加图片水印


     // 引用Spire.Pdf
            /// <summary>
            /// 制作水印图片并给pdf添加图片水印(缺点:将图片作为背景并设成透明的形式的假水印)
            /// </summary>
            /// <param name="savepath">pdf文件地址</param>
            /// <param name="str">水印信息文本</param>
            public static void AddImageWaterMark(string savepath, string str)
            {
                // 添加一个空白图片,宽高可自定义设置
                using (Bitmap bm = new Bitmap(410, 600))
                {
                    Graphics g = Graphics.FromImage(bm);
                    // 清空图片并添加背景色
                    g.Clear(Color.White);
                    //公共内容
                    g.SmoothingMode = SmoothingMode.HighQuality;
                    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    g.CompositingQuality = CompositingQuality.HighQuality;
                    g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel;
                    /*添加水印*/
                    //图片的宽度与高度
                    int height = bm.Height;
                    //水印文字
                    string text = str;
                    // 可通过FontStyle 修改字体样式
                    System.Drawing.Font crFont = new System.Drawing.Font("微软雅黑", 14, FontStyle.Italic);
                    // FromArgb的第一个参数为透明度,最大为255
                    SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(120, Color.Black));
                    //将原点移动 到图片中点
                    g.TranslateTransform(0, height);
                    //以原点为中心 转 -45度
                    g.RotateTransform(-20);
                    for (int i = 0; i < 10; i++)
                    {
                        g.DrawString(text, crFont, semiTransBrush, new PointF(-600 + i * 150, -600 + i * 100));
                        g.DrawString(text, crFont, semiTransBrush, new PointF(-400 + i * 150, -600 + i * 100));
                        g.DrawString(text, crFont, semiTransBrush, new PointF(-200 + i * 150, -600 + i * 100));
                        g.DrawString(text, crFont, semiTransBrush, new PointF(0 + i * 150, -600 + i * 100));
                        g.DrawString(text, crFont, semiTransBrush, new PointF(200 + i * 150, -600 + i * 100));
                        g.DrawString(text, crFont, semiTransBrush, new PointF(400 + i * 150, -600 + i * 100));
                        g.DrawString(text, crFont, semiTransBrush, new PointF(600 + i * 150, -600 + i * 100));
                    }
                     /*添加水印*/
                     g.Dispose();
                     // 将水印图片存储下来
                     // bm.Save($"{AppDomain.CurrentDomain.BaseDirectory}File/666.png", ImageFormat.Png);
                     // 将图片转为Stream
                     MemoryStream ms = new MemoryStream();
                     bm.Save(ms, ImageFormat.Png);
                     System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
                     // 定义一个对象,并加读取pdf文件
                    Spire.Pdf.PdfDocument pdf = new Spire.Pdf.PdfDocument();
                    pdf.LoadFromFile(savepath);
                    // 获取PDF文档的第一页(多页可用循环去指定背景)
                    Spire.Pdf.PdfPageBase page = pdf.Pages[0];
                    // 设置背景图片
                    page.BackgroundImage = img;
                    // 指定背景图的位置和大小
                    page.BackgroundRegion = new RectangleF(0, 0, img.Width, img.Height);
                    pdf.SaveToFile(savepath);
                    pdf.Close();
                }
            }
    

      

  • 相关阅读:
    并发运行的思维模型
    进程和线程的区别
    拿来主义
    同步组件合作和团队合作 让世界变得更美好
    strace a++;b++;a+b;
    System 88: GDB Overview
    numpy多维数组维度及添加轴的理解
    Numpy入门
    python列表list 和numpy.array区别
    数组的生成方法
  • 原文地址:https://www.cnblogs.com/besos/p/14758336.html
Copyright © 2020-2023  润新知