0

0

C#在PDF中创建和填充域的详细介绍(图文)

黄舟

黄舟

发布时间:2017-03-31 15:05:53

|

2203人浏览过

|

来源于php中文网

原创

本文主要介绍了c#pdf中创建和填充域的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧

众所周知,PDF文档通常是不能编辑和修改的。如果用户需要在PDF文档中签名或者填写其他内容时,就需要PDF文档中有可编辑的域。开发者也经常会遇到将数据以编程的方式填充到PDF模板域的需求。这时候就需要解决以下两个问题:

  1. 如何在PDF中创建可编辑的域?

  2. 如何将内容准确地填写到这些域中?

这里我将介绍怎样使用C#和Free Spire.PDF组件来实现这一功能。

Free Spire.PDF组件概述

Free Spire.PDF是一个免费专业的PDF组件,用于在.NET应用程序中创建,编辑,处理和阅读PDF文档。支持丰富的PDF文档处理操作,如PDF文档合并/拆分、转换(如HTML转PDF,PDF转图片等)、打印(包括静默打印)、压缩、添加注释、安全设置(包括数字签名)、创建与填充域、图片插入与提取、文本提取与高亮等。不依赖Adobe Acrobat,并且支持中文。 

关于安装,有很多种渠道,包括官网以及开发者最喜欢和常用的NuGet方式。在Visual Studio的 NuGet Package Manager Console中输入以下PowerShell命令回车,组件的dll就会自动地引用到项目中:

PM> Install-Package FreeSpire.PDF

创建和填充域的实现

1.创建域

该组件提供了很多对应的类,通过这些类我们可以创建多种PDF域。因为种类比较多,所以下面我只列出了一些常见的域和该域在组件中所对应的类名。

域名

类名

文本域

PdfTextBoxField

签名域

PdfSignatureField

复选框

PdfCheckBoxField

组合框

PdfComboBoxField

列表框

PdfListBoxField

按钮

PdfRadioButtonListField(单选按钮)

PdfButtonField (普通按钮)

这里我选取PDF文档中最常见的两种可编辑域进行介绍:文本域和签名域。

1.1 文本域

首先,我创建了一个简单的文本域。在创建的时候需要指定域的名称,这样做的好处在于,如果文档中同时存在多个文本域,当我们以编程的方式填写域的时候,可以根据域的名称快速准确地将内容填写到指定的域中。需要注意的是域名不要重复,否则会将内容填写到该域名对应的所有域中。

PageGen
PageGen

AI页面生成器,支持通过文本、图像、文件和URL一键生成网页。

下载
//创建PDF文档
PdfDocument pdf = new PdfDocument();
//添加一个新页面
PdfPageBase page = pdf.Pages.Add(PdfPageSize.A4, new PdfMargins());
//添加文本到页面
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial Unicode MS", 10f), true);
page.Canvas.DrawString("年龄:", font, PdfBrushes.DeepSkyBlue, 10, 50);
//创建文本域并指定文本域的名称
PdfTextBoxField textbox = new PdfTextBoxField(page, "Age");  
//设置文本域的大小、位置、字体
textbox.Bounds = new RectangleF(40, 50, 50, 12);  
textbox.Font = font;
//添加文本域到文档
pdf.Form.Fields.Add(textbox);
//保存文档
pdf.SaveToFile("Fields.pdf");

C#在PDF中创建和填充域的详细介绍(图文)

当然多数时候我们的需求可能不止是创建一个简单的文本域,还需要做一些其他设置,如设置边框、背景色、字体颜色、字体排列方式。甚至是指定文本域的输入内容,如只能输入日期或某一范围内的数字等。

设置格式:

//设置边框
textbox.BorderWidth = 0.75f;
textbox.BorderStyle = PdfBorderStyle.Solid;
textbox.BorderColor = Color.Black;
//设置背景色
textbox.BackColor = Color.Yellow;
//设置字体颜色
textbox.ForeColor = Color.Red;
//设置字体排列方式 
textbox.TextAlignment = PdfTextAlignment.Center;

C#在PDF中创建和填充域的详细介绍(图文)

指定文本域的输入内容:

Adobe Acrobat支持开发者使用Javascript来预先定义文本域输入内容的格式、类型等。该组件也支持这类script并提供了对应的方法来实现这些功能。下表列出了部分Javascript和方法:

描述

示例

Javascript

方法

Date

01/31/2008

AFDate_FormatEx("mm/dd/yyyy");
     AFDate_KeystrokeEx("mm/dd/yyyy");

GetDateFormatString("mm/dd/yyyy");
     GetDateKeystrokeString("mm/dd/yyyy");

Date

1/31/2008

AFDate_FormatEx("m/d/yyyy");
     AFDate_KeystrokeEx("m/d/yyyy");

GetDateFormatString("m/d/yyyy");
     GetDateKeystrokeString("m/d/yyyy");

Zip code

12345

AFSpecial_Format(0);
     AFSpecial_Keystroke(0);

GetSpecialFormatString(0);
     GetSpecialKeystrokeString(0);

Zip+4

12345-1234

AFSpecial_Format(1);
     AFSpecial_Keystroke(1);

GetSpecialFormatString(1);
     GetSpecialKeystrokeString(1);

Phone number

(123) 456-7890

AFSpecial_Format(2);
     AFSpecial_Keystroke(2);

GetSpecialFormatString(2);
     GetSpecialKeystrokeString(2);

Money

$12,345.00
       -$12,345.00

AFNumber_Format(2, 0, 0, 0,   "$", true);
     AFNumber_Keystroke(2, 0, 0, 0, "$", true);

GetNumberFormatString(2, 0,   0, 0, "$", true);
     GetNumberKeystrokeString(2, 0, 0, 0, "$", true);

Validate

1≤input value≤10

AFRange_Validate(true,1,true,10)

GetRangeValidateString(true,   1, true, 10);

示例:


//指定输入数据在1-100之间
string js = PdfJavascript.GetRangeValidateString(true, 1, true, 100);
PdfJavascriptAction jsAction = new PdfJavascriptAction(js);
textbox.Actions.Validate = jsAction;

C#在PDF中创建和填充域的详细介绍(图文)

1.2 签名域

创建签名域与文本域类似,也可以设置域的边框、大小、位置等属性。这里就不再赘述了。


//创建签名域并指定域名
PdfSignatureField signaturefield = new PdfSignatureField(page, "Signature");
//设置域的边框
signaturefield.BorderWidth = 1.0f;
signaturefield.BorderStyle = PdfBorderStyle.Solid;
signaturefield.BorderColor = new PdfRGBColor(System.Drawing.Color.Black);
//设置高亮模式
signaturefield.HighlightMode = PdfHighlightMode.Outline;
//设置大小与位置
signaturefield.Bounds = new RectangleF(40, 150, 200, 100);
//将签名域添加到页面
pdf.Form.Fields.Add(signaturefield);

C#在PDF中创建和填充域的详细介绍(图文)

2. 填充域

填充域时需要先获取文档中所有的域,然后再逐一填充指定域。如果同一类型的域比较多,则可使用域的名称快速填充。


//加载PDF文档
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("Fields.pdf");
//获取第一页
PdfPageBase page = pdf.Pages[0];
//获取文档的所有域
PdfFormWidget form = pdf.Form as PdfFormWidget;
//填充第一个文本域
PdfTextBoxFieldWidget textboxField = form.FieldsWidget[0] as PdfTextBoxFieldWidget;
textboxField.Text = "25";
//填充第二个签名域
PdfSignatureFieldWidget signatureField = form.FieldsWidget[1] as PdfSignatureFieldWidget;
String pfxPath = @"gary.pfx";
PdfCertificate digi = new PdfCertificate(pfxPath, "123456");   
PdfSignature signature = new PdfSignature(pdf, page, digi, "demo", signatureField);
signature.IsTag = true;
signature.DigitalSigner = "Gary";
signature.ConfigGraphicType = ConfiguerGraphicType.TextSignInformation;
//保存文档
pdf.SaveToFile("Fill.pdf");

C#在PDF中创建和填充域的详细介绍(图文)

相关文章

WPS零基础入门到精通全套教程!
WPS零基础入门到精通全套教程!

全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

2

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

437

2026.01.28

包子漫画在线官方入口大全
包子漫画在线官方入口大全

本合集汇总了包子漫画2026最新官方在线观看入口,涵盖备用域名、正版无广告链接及多端适配地址,助你畅享12700+高清漫画资源。阅读专题下面的文章了解更多详细内容。

143

2026.01.28

ao3中文版官网地址大全
ao3中文版官网地址大全

AO3最新中文版官网入口合集,汇总2026年主站及国内优化镜像链接,支持简体中文界面、无广告阅读与多设备同步。阅读专题下面的文章了解更多详细内容。

255

2026.01.28

php怎么写接口教程
php怎么写接口教程

本合集涵盖PHP接口开发基础、RESTful API设计、数据交互与安全处理等实用教程,助你快速掌握PHP接口编写技巧。阅读专题下面的文章了解更多详细内容。

8

2026.01.28

php中文乱码如何解决
php中文乱码如何解决

本文整理了php中文乱码如何解决及解决方法,阅读节专题下面的文章了解更多详细内容。

13

2026.01.28

Java 消息队列与异步架构实战
Java 消息队列与异步架构实战

本专题系统讲解 Java 在消息队列与异步系统架构中的核心应用,涵盖消息队列基本原理、Kafka 与 RabbitMQ 的使用场景对比、生产者与消费者模型、消息可靠性与顺序性保障、重复消费与幂等处理,以及在高并发系统中的异步解耦设计。通过实战案例,帮助学习者掌握 使用 Java 构建高吞吐、高可靠异步消息系统的完整思路。

10

2026.01.28

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

24

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

124

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 7.9万人学习

C 教程
C 教程

共75课时 | 4.3万人学习

C++教程
C++教程

共115课时 | 14.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号