如何使用C#程序给PDF文件添加编辑域

 更新时间:2017年01月06日 08:38:19   作者:冯威  
本文主要给大家分享的是通过C#操作PDF类库iTextSharp来实现在在PDF文档中填写日期或签名之类的能编辑的文本域,非常的简单实用,有需要的小伙伴可以参考下。

PDF文档通常是不能编辑的,但有些时候需要在PDF文档中填写日期或签名之类,就需要在PDF有能编辑的文本域,本文介绍怎样用C#来实现这一功能。

环境

工具:VS2015

语言:C#

操作PDF类库:iTextSharp 5.5.10

生成的PDF预览的工具:Skim、福昕阅读器、Acrobat Reader

代码实现

获取文档的页数

PdfReader reader = new PdfReader(@"C:\WorkSpace\1.pdf");
int count = reader.NumberOfPages;

创建文本域

TextField fieldDate = new TextField(stamp.Writer, new iTextSharp.text.Rectangle(105, 100, 240, 125), "date");
fieldDate.BackgroundColor= BaseColor.WHITE;fieldDate.BorderWidth= 1;
fieldDate.BorderColor= BaseColor.BLACK;fieldDate.BorderStyle= 4;
fieldDate.FontSize = 11f;

iTextSharp.text.Rectangle(105, 100, 240, 125) 用来设置文本域的位置,四个参数分别为:llx、lly、urx、ury:

llx 为Left ,lly 为Bottom,urx 为Right,ury 为Top
其中:Width=Right - Left Heigth = Top - Bototom
创建文本

Chunk cname = new Chunk("Date:", FontFactory.GetFont("Futura", 16f,new BaseColor(170,64,0)));
Phrase pname = new Phrase(cname);
PdfContentByte over = stamp.GetOverContent(count);
ColumnText.ShowTextAligned(over, Element.ALIGN_CENTER, pname, 400, 420, 0);

完整代码

public static void AddTextField()
{
   PdfReader reader = new PdfReader(@"C:\WorkSpace\1.pdf");
      
   FileStream out1 = new FileStream(@"C:\WorkSpace\2.pdf", FileMode.Create, FileAccess.Write);

   PdfStamper stamp = new PdfStamper(reader, out1);
      //获得pdf总页数
   int count = reader.NumberOfPages;

   TextField fieldDate = new TextField(stamp.Writer, new iTextSharp.text.Rectangle(105, 100, 240, 125), "date");
   fieldDate.BackgroundColor = BaseColor.WHITE;
   fieldDate.BorderWidth = 1;
   fieldDate.BorderColor = BaseColor.BLACK;
   fieldDate.BorderStyle = 4;
   fieldDate.FontSize = 11f;

   TextField fieldSign = new TextField(stamp.Writer, new iTextSharp.text.Rectangle(430, 100, 530, 125), "sign");
   fieldSign.BackgroundColor = BaseColor.WHITE;
   fieldSign.BorderWidth = 1;
   fieldSign.BorderColor = BaseColor.BLACK;
   fieldSign.BorderStyle = 4;
   fieldSign.FontSize = 11f;

   Chunk cname = new Chunk("Date:", FontFactory.GetFont("Futura", 16f,new BaseColor(170,64,0)));
   Chunk ctitle = new Chunk("User Sign:", FontFactory.GetFont("Futura", 16f, new BaseColor(0, 128, 128)));
   Phrase pname = new Phrase(cname);
   Phrase ptitle = new Phrase(ctitle);

   //PdfContentBye类,用来设置图像和文本的绝对位置
   PdfContentByte over = stamp.GetOverContent(count);
   ColumnText.ShowTextAligned(over, Element.ALIGN_CENTER, pname, 400, 420, 0);
   ColumnText.ShowTextAligned(over, Element.ALIGN_CENTER, ptitle, 400, 350, 0);

   stamp.AddAnnotation(fieldDate.GetTextField(), count);
   stamp.AddAnnotation(fieldSign.GetTextField(), count);

   stamp.FormFlattening = true; 

   stamp.Close();
}

相关文章

  • 基于WPF实现简单的文件夹比较工具

    基于WPF实现简单的文件夹比较工具

    文件比较平常都是用Beyond Compare,可以说离不开的神器,不过Beyond Compare平常拿它主要是用来做代码比较,用来做一些大批量的二进制文件比较,其实有点不是很方便,所以本文来用WPF做一个简单的文件夹比较的小工具
    2023-05-05
  • c#中实现图片灰度化技术详解

    c#中实现图片灰度化技术详解

    这篇文章主要介绍了c#中实现图片灰度化技术详解,本文给出计算公式和实现代码以及图片例子,需要的朋友可以参考下
    2014-08-08
  • C#程序集的主版本号和次版本号的实现

    C#程序集的主版本号和次版本号的实现

    C# 程序集的版本号和次版本号是程序集的一部分,用于标识程序集的不同版,本本文主要介绍了C#程序集的主版本号和次版本号的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • 使用C#验证PDF数字签名有效性的方法示例

    使用C#验证PDF数字签名有效性的方法示例

    数字签名作为PDF文档中的重要安全机制,不仅能够验证文件的来源,还能确保文件内容在传输过程中未被篡改,本文将详细介绍如何使用免费.NET控件通过C#验证PDF签名的有效性以及验证PDF文档是否被修改,需要的朋友可以参考下
    2024-07-07
  • C#获取系统版本信息方法

    C#获取系统版本信息方法

    今天做一个获取系统版本信息的实例,其获取方法很简单,需要的朋友可以参考下
    2012-11-11
  • C#实现更改MDI窗体背景颜色的方法

    C#实现更改MDI窗体背景颜色的方法

    这篇文章主要介绍了C#实现更改MDI窗体背景颜色的方法,涉及C#窗体背景色的设置技巧,非常简单实用,需要的朋友可以参考下
    2015-08-08
  • C#将数字转换成字节数组的方法

    C#将数字转换成字节数组的方法

    这篇文章主要介绍了C#将数字转换成字节数组的方法,涉及C#字符串操作的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • c# 通过代码开启或关闭防火墙

    c# 通过代码开启或关闭防火墙

    这篇文章主要介绍了c# 通过代码开启或关闭防火墙的示例,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-10-10
  • C# wpf利用附加属性实现任意控件拖动

    C# wpf利用附加属性实现任意控件拖动

    这篇文章主要为大家详细介绍了C# WPF如何利用附加属性对几种拖动方式进行封装,实现复用性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • asp.net之生成验证码的方法集锦(一)

    asp.net之生成验证码的方法集锦(一)

    现在很多网站都有注册登录的页面,为了更好的满足用户体验和网站的安全性,很多网站都采用动态生成的图形码或者是附加码进行验证,这篇文章主要就是介绍生成验证码的方法,需要的朋友可以参考下
    2015-08-08

最新评论