详解C#使用iTextSharp添加PDF水印的代码案例


本文摘自PHP中文网,作者黄舟,侵删。

这篇文章主要为大家详细介绍了C#使用iTextSharp添加PDF水印的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

/// <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#与java的区别

C#中sealed关键字的作用详解

C#解析xml文件的代码实例分享

C#教程】C# 预处理器指令

C#基础入门-关键字的介绍

C#和c ++的区别是什么

具体介绍C#使用selenium+phantomjs抓取数据的案例(图文)

C# 2.0 specification(一)简介

C#学习记录:编写高质量代码改善整理建议1-3

基础学习之C#的封装

更多相关阅读请进入《C#》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...