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


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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    ///
    /// 导出PDF
    ///
    /// 图片的路劲
    /// 图片的名称
    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();
        }
    }
     
    ///
    /// 生成水印图片
    ///
    ///
    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;
    }

      

  • 相关阅读:
    FB潜在客户表单自定义问题有哪几种类型?
    强网杯2022——WEB
    c++---I/o操作
    docker 开发环境搭建
    Python爬虫项目实战:百度任意图片抓取
    项目-SpringBoot
    go-07-数据类型-浮点型
    攻防世界 [简单] 凯撒大帝在培根里藏了什么
    极客的浪漫「GitHub 热点速览 v.22.41」
    linux 学习 day08 多线程
  • 原文地址:https://www.cnblogs.com/zhenzaizai/p/17496661.html