C#利用iTextSharp组件给PDF文档添加图片/文字水印

作者:细数青春 时间:2021-11-03 20:18:31 

最近在做关于PDF文档添加水印的功能,折腾了好久,终于好了。以下做个记录:

首先会用到iTextSharp组件,大家可以去官网下载,同时我也会在本文中附加进来。

代码中添加引用为:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using iTextSharp.text.pdf;
using System.IO;
using iTextSharp.text;

创建一个显示指定图片的pdf


/// <summary>
/// 创建一个显示指定图片的pdf
/// </summary>
/// <param name="picPdfPath"></param>
/// <param name="picPath"></param>
/// <returns></returns>
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();
 }
 }

}

为PDF文档添加图片水印


/// <summary>
/// 加图片水印
/// </summary>
/// <param name="inputfilepath"></param>
/// <param name="outputfilepath"></param>
/// <param name="ModelPicName"></param>
/// <param name="top"></param>
/// <param name="left"></param>
/// <returns></returns>
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();
 }
}

添加普通偏转角度文字水印


/// <summary>
/// 添加普通偏转角度文字水印
/// </summary>
/// <param name="inputfilepath"></param>
/// <param name="outputfilepath"></param>
/// <param name="waterMarkName"></param>
/// <param name="permission"></param>
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();
 }
}

添加倾斜水印


/// <summary>
/// 添加倾斜水印
/// </summary>
/// <param name="inputfilepath"></param>
/// <param name="outputfilepath"></param>
/// <param name="waterMarkName"></param>
/// <param name="userPassWord"></param>
/// <param name="ownerPassWord"></param>
/// <param name="permission"></param>
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 < total; i++)
 {
  rise = 500;
  content = pdfStamper.GetOverContent(i);//在内容上方加水印
  //content = pdfStamper.GetUnderContent(i);//在内容下方加水印

content.BeginText();
  content.SetColorFill(BaseColor.DARK_GRAY);
  content.SetFontAndSize(font, 50);
  // 设置水印文字字体倾斜 开始
  if (j >= 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();
 }
}

调用方法的例子:


string path = "D://my.pdf";
 HtmlToPDFUtil.HtmlToPdf(Request.Url.AbsoluteUri, path);
 //HtmlToPDFUtil.HtmlToPdf(sbUrlList.ToString(), path);
 PDFSetWaterMark.PDFWatermark(path, "D://my.pdf", Server.MapPath("/HtmlToPdf/Tools/sy.bmp"), 0, 0);
 PDFSetWaterMark.setWatermark("D://my.pdf", "D://my2.pdf", "TEST");
 //PDFSetWaterMark.setWatermark("D://my.pdf", "D://my2.pdf", "TEST", "", "", 1);

附件:iTextSharp

来源:https://www.cnblogs.com/xishuqingchun/p/3838185.html

标签:itextsharp,pdf,水印
0
投稿

猜你喜欢

  • 基于java实现人机猜拳游戏

    2021-06-09 08:50:32
  • 通过实例解析Socket套接字通信原理

    2023-11-02 20:17:35
  • SpringBoot操作mongo实现方法解析

    2023-03-19 00:50:56
  • Java解除文件占用即Dom4j操作后实现xml关流

    2022-07-05 19:18:35
  • Java动态脚本Groovy

    2023-12-05 03:25:50
  • Android App开发中ViewPager组件的入门使用教程

    2023-04-30 21:45:34
  • Java实现的质因数分解操作示例【基于递归算法】

    2023-08-19 03:22:12
  • java使用FFmpeg合成视频和音频并获取视频中的音频等操作(实例代码详解)

    2023-10-28 15:42:24
  • Springboot启动后执行方法小结

    2022-09-26 22:12:02
  • 详解Spring-bean的循环依赖以及解决方式

    2023-08-18 18:30:38
  • 总结Android App内存优化之图片优化

    2022-07-01 22:52:16
  • Flutter自动路由插件auto_route使用详解

    2022-04-25 12:39:52
  • java判断字符串是否有逗号的方法

    2021-11-03 08:01:23
  • anroid开发教程之spinner下拉列表的使用示例

    2023-10-05 05:42:22
  • Java Hutool 包工具类推荐 ExcelUtil详解

    2023-01-22 23:47:12
  • IDEA JetBrains Mono字体介绍和安装教程(详解)

    2022-01-23 17:57:51
  • SpringMVC记录我遇到的坑_AOP注解无效,切面不执行的解决

    2021-08-09 06:20:58
  • java生成随机字符串的两种方法

    2022-09-09 22:49:26
  • spring boot实现过滤器和拦截器demo

    2023-08-24 07:15:01
  • Java 的可变参数方法详述

    2022-06-03 19:12:34
  • asp之家 软件编程 m.aspxhome.com