使用C# 创建、填写、删除PDF表单域

这篇具有很好参考价值的文章主要介绍了使用C# 创建、填写、删除PDF表单域。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

通常情况下,PDF文件是不可编辑的,但PDF表单提供了一些可编辑区域,允许用户填写和提交信息。PDF表单通常用于收集信息、反馈或进行在线申请,是许多行业中数据收集和交换的重要工具。

PDF表单可以包含各种类型的输入控件,如文本框、复选框、下拉菜单、单选按钮等。本文将介绍如何使用C# 和一个免费.NET库来操作PDF表单,包括以下三个示例:

  • 创建PDF表单域
  • 填写PDF表单域
  • 删除PDF表单域

安装免费.NET PDF库Free Spire.PDF for .NET (可通过 NuGet安装,或下载后手动引用dll)

PM> Install-Package FreeSpire.PDF

 

常见PDF表单域

Free Spire.PDF for .NET 支持创建、操作多种PDF表域,包括文本框、复选框、组合框、列表框和单选按钮等。下表列出了一些常见的域及其在该免费库中对应的类名。

表单域名  类名
文本域 PdfTextBoxField
复选框 PdfCheckBoxField
组合框  PdfComboBoxField
列表框 PdfListBoxField
单选按钮 PdfRadioButtonListField
普通按钮 PdfButtonField
签名域  PdfSignatureField

使用C# 创建PDF表单域

使用Free Spire.PDF制作表单域,需要先创建以上各表单域类的对象,然后通过 Bounds 属性设置表单域的位置和大小,最后再通过PdfFormFieldCollection.Add() 方法将表单域绘制到PDF页面指定位置处。

以下是如何在PDF中创建上述常见PDF表单域的C#代码:

using Spire.Pdf;
using Spire.Pdf.Actions;
using Spire.Pdf.Fields;
using Spire.Pdf.Graphics;
using System.Drawing;
 
namespace CreateFillableFormsInPdf
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建PdfDocument对象
            PdfDocument pdf = new PdfDocument();
 
            //添加一页
            PdfPageBase page = pdf.Pages.Add();
 
            //初始化x、y坐标
            float baseX = 60;
            float baseY = 20;
 
            //创建两个画刷
            PdfSolidBrush brush1 = new PdfSolidBrush(new PdfRGBColor(Color.Brown));
            PdfSolidBrush brush2 = new PdfSolidBrush(new PdfRGBColor(Color.Black));
 
            //创建字体
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("微软雅黑", 11f, FontStyle.Regular), true);
 
            //添加文本框 
            page.Canvas.DrawString("姓名:", font, brush1, new PointF(10, baseY));
            RectangleF tbxBounds = new RectangleF(baseX, baseY, 150, 18);
            PdfTextBoxField textBox = new PdfTextBoxField(page, "姓名");
            textBox.Bounds = tbxBounds;
            textBox.Font = font;
            pdf.Form.Fields.Add(textBox);
            baseY += 30;
 
            //添加两个复选框
            page.Canvas.DrawString("民族:", font, brush1, new PointF(10, baseY));
            RectangleF checkboxBound1 = new RectangleF(baseX, baseY, 15, 15);
            PdfCheckBoxField checkBoxField1 = new PdfCheckBoxField(page, "选项1");
            checkBoxField1.Bounds = checkboxBound1;
            checkBoxField1.Checked = false;
            page.Canvas.DrawString("汉族", font, brush2, new PointF(baseX + 20, baseY));
 
            RectangleF checkboxBound2 = new RectangleF(baseX + 70, baseY, 15, 15);
            PdfCheckBoxField checkBoxField2 = new PdfCheckBoxField(page, "选项2");
            checkBoxField2.Bounds = checkboxBound2;
            checkBoxField2.Checked = false;
            page.Canvas.DrawString("少数民族", font, brush2, new PointF(baseX + 90, baseY));
            pdf.Form.Fields.Add(checkBoxField1);
            pdf.Form.Fields.Add(checkBoxField2);
            baseY += 30;
 
            //添加列表框
            page.Canvas.DrawString("分公司:", font, brush1, new PointF(10, baseY));
            RectangleF listboxBound = new RectangleF(baseX, baseY, 150, 50);
            PdfListBoxField listBoxField = new PdfListBoxField(page, "分公司");
            listBoxField.Items.Add(new PdfListFieldItem("成都", "成都"));
            listBoxField.Items.Add(new PdfListFieldItem("武汉", "武汉"));
            listBoxField.Items.Add(new PdfListFieldItem("深圳", "深圳")); ;
            listBoxField.Bounds = listboxBound;
            listBoxField.Font = font;
            pdf.Form.Fields.Add(listBoxField);
            baseY += 60;
 
            //添加两个单选按钮
            page.Canvas.DrawString("性别:", font, brush1, new PointF(10, baseY));
            PdfRadioButtonListField radioButtonListField = new PdfRadioButtonListField(page, "性别");
            PdfRadioButtonListItem radioItem1 = new PdfRadioButtonListItem("选项1");
            RectangleF radioBound1 = new RectangleF(baseX, baseY, 15, 15);
            radioItem1.Bounds = radioBound1;
            page.Canvas.DrawString("", font, brush2, new PointF(baseX + 20, baseY));
 
            PdfRadioButtonListItem radioItem2 = new PdfRadioButtonListItem("选项2");
            RectangleF radioBound2 = new RectangleF(baseX + 70, baseY, 15, 15);
            radioItem2.Bounds = radioBound2;
            page.Canvas.DrawString("", font, brush2, new PointF(baseX + 90, baseY));
            radioButtonListField.Items.Add(radioItem1);
            radioButtonListField.Items.Add(radioItem2);
            pdf.Form.Fields.Add(radioButtonListField);
            baseY += 30;
 
            //添加组合框
            page.Canvas.DrawString("部门:", font, brush1, new PointF(10, baseY));
            RectangleF cmbBounds = new RectangleF(baseX, baseY, 150, 18);
            PdfComboBoxField comboBoxField = new PdfComboBoxField(page, "部门");
            comboBoxField.Bounds = cmbBounds;
            comboBoxField.Items.Add(new PdfListFieldItem("财务", "财务"));
            comboBoxField.Items.Add(new PdfListFieldItem("技术", "技术"));
            comboBoxField.Items.Add(new PdfListFieldItem("采购", "采购"));
            comboBoxField.Items.Add(new PdfListFieldItem("销售", "销售"));
            comboBoxField.Font = font;
            pdf.Form.Fields.Add(comboBoxField);
            baseY += 30;
 
            //添加签名域
            page.Canvas.DrawString("签名:", font, brush1, new PointF(10, baseY));
            PdfSignatureField sgnField = new PdfSignatureField(page, "签名域");
            RectangleF sgnBounds = new RectangleF(baseX, baseY, 150, 80);
            sgnField.Bounds = sgnBounds;
            pdf.Form.Fields.Add(sgnField);
            baseY += 90;
 
            //添加按钮
            page.Canvas.DrawString("按钮:", font, brush1, new PointF(10, baseY));
            RectangleF btnBounds = new RectangleF(baseX, baseY, 50, 18);
            PdfButtonField buttonField = new PdfButtonField(page, "按钮");
            buttonField.Bounds = btnBounds;
            buttonField.Text = "提交";
            buttonField.Font = font;
            PdfSubmitAction submitAction = new PdfSubmitAction("https://www.****.com");
            submitAction.DataFormat = SubmitDataFormat.Html;
            buttonField.Actions.MouseDown = submitAction;
            pdf.Form.Fields.Add(buttonField);
 
            //保存文件
            pdf.SaveToFile("PDF表单.pdf", FileFormat.PDF);
        }
    }
}

生成文件:

使用C# 创建、填写、删除PDF表单域

 

使用C# 填写PDF表单域

填充表单域需要先获取PDF中的所有表单字段,然后确定其表单类型,最后再填写数据或从预定列表中选择值。

以下是如何填充现有PDF表单域的C#代码:

using Spire.Pdf;
using Spire.Pdf.Fields;
using Spire.Pdf.Widget;
 
namespace FillFormFields
{
    class Program
    {
        static void Main(string[] args)
        {
            //加载PDF表单
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("PDF表单.pdf");
 
            //获取文档中的表单
            PdfFormWidget form = (PdfFormWidget)pdf.Form;
 
            //获取表单域集合
            PdfFormFieldWidgetCollection formWidgetCollection = form.FieldsWidget;
 
            //遍历表单域
            for (int i = 0; i < formWidgetCollection.Count; i++)
            {
                //获取指定域
                PdfField field = formWidgetCollection[i];
 
                //判断该表单域是否为文本框
                if (field is PdfTextBoxFieldWidget)
                {
                    if (field.Name == "姓名")
                    {
                        //填充文本
                        PdfTextBoxFieldWidget textBoxField = (PdfTextBoxFieldWidget)field;
                        textBoxField.Text = "张三";
                    }
                }
 
                //判断该表单域是否为单选按钮
                if (field is PdfRadioButtonListFieldWidget)
                {
                    if (field.Name == "性别")
                    {
                        //为单选按钮选定一个值
                        PdfRadioButtonListFieldWidget radioButtonListField = (PdfRadioButtonListFieldWidget)field;
                        radioButtonListField.SelectedIndex = 0;
                    }
                }
 
                //判断该表单域是否为组合框
                if (field is PdfComboBoxWidgetFieldWidget)
                {
                    if (field.Name == "部门")
                    {
                        //为组合框选定一个值
                        PdfComboBoxWidgetFieldWidget comboBoxField = (PdfComboBoxWidgetFieldWidget)field;
                        int[] index = { 1 };
                        comboBoxField.SelectedIndex = index;
                    }
                }
 
                //判断该表单域是否为复选框
                if (field is PdfCheckBoxWidgetFieldWidget)
                {
                    //设置复选框的"已选中"状态
                    PdfCheckBoxWidgetFieldWidget checkBoxField = (PdfCheckBoxWidgetFieldWidget)field;
                    switch (checkBoxField.Name)
                    {
                        case "选项1":
                            checkBoxField.Checked = true;
                            break;
                    }
                }
 
                //判断该表单域是否为列表框
                if (field is PdfListBoxWidgetFieldWidget)
                {
                    if (field.Name == "分公司")
                    {
                        //为列表框选定一个值
                        PdfListBoxWidgetFieldWidget listBox = (PdfListBoxWidgetFieldWidget)field;
                        int[] index = { 1 };
                        listBox.SelectedIndex = index;
                    }
                }
            }
 
            //保存文件
            pdf.SaveToFile("填充PDF表单域.pdf", FileFormat.PDF);
        }
    }
}

输出结果:

使用C# 创建、填写、删除PDF表单域

 

使用C# 删除PDF表单域

Free Spire.PDF支持通过索引或名称删除指定的表单域或删除所有表单域。

以下是如何删除PDF表单域的C#代码:

using Spire.Pdf;
using Spire.Pdf.Fields;
using Spire.Pdf.Widget;
 
namespace RemoveFormFields
{
    class Program
    {
        static void Main(string[] args)
        {
            //加载PDF表单
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("PDF表单.pdf");
 
            //获取文档中的表单域
            PdfFormWidget formWidget = pdf.Form as PdfFormWidget;
 
            //遍历表单域
            for (int i = formWidget.FieldsWidget.List.Count - 1; i >= 0; i--)
            {
                //获取指定表单域
                PdfField field = formWidget.FieldsWidget.List[i] as PdfField;
 
                //删除表单域
                formWidget.FieldsWidget.Remove(field);
            }
 
            //通过表单域名获取指定表单
            //PdfField field = formWidget.FieldsWidget["name"];
            //删除该表单域
            //formWidget.FieldsWidget.Remove(field);
 
            //保存PDF文件
            pdf.SaveToFile("删除PDF表单域.pdf");
        }
    }
}

 


 

 

以上代码演示了PDF表单的基本操作,包括添加文本框、复选框、组合框、单选按钮等各种常见的表单域,填写现有PDF表单,以及删除PDF表单。Free Spire.PDF免费库该支持其他多种PDF元素,点击查看更多示例。文章来源地址https://www.toymoban.com/news/detail-855432.html

到了这里,关于使用C# 创建、填写、删除PDF表单域的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python使用Selenium自动实现表单填写之龙年纪念币预约

    声明 :本文只做技术交流,不可用代码为商业用途,文末有源码下载,已测试可用。 Part 1 配置文件改写(源码 有详细的注释说明 读取配置文件,自己组数据库,录入信息 配置文件 Part 2 主函数 每一期的xpath路径都不一样 所以需要提前去网站获取 新的 Xpath 具体方法如下

    2024年02月01日
    浏览(73)
  • 使用C#如何监控选定文件夹中文件的变动情况?

    1、前言 2、效果 3、具体实现 ​ 页面设计 ​ 全部代码 ​ FileSystemWatcher的介绍 ​ FileSystemWatcher的构造函数 ​ FileSystemWatcher的属性 ​ FileSystemWatcher的事件 4、总结 有时候我们会有监控电脑上某一个文件夹中文件变动情况的需求,在本文中,我也会以一个具体的例子,说明在

    2024年02月04日
    浏览(49)
  • vue2:elementUI中Form 表单在特定情况下做动态rules添加删除

    先看需求: (不想看的直接拉到最后)  【需求说明】 6、如状态为上架时,库存为必填,下架状态时,库存为可填,前面无星号 实现方法:使用this.$set()和this.$delete() 上代码: 由于设计商业隐私,代码只上传一部分:   表单data中原来的rules: 不添加上下架状态的rules 在

    2023年04月08日
    浏览(40)
  • hadoop java 创建文件夹 弹出窗口填写文件夹名称

    在Hadoop中使用Java创建文件夹时,无法弹出窗口来填写文件夹名称,因为Hadoop是一个分布式系统,运行在多台计算机上,无法直接与用户交互。 要创建文件夹,可以使用Hadoop的Java API中的Filesystem对象。以下是一个示例代码,演示如何在Hadoop中创建文件夹: 此代码创建了一个名

    2024年01月19日
    浏览(57)
  • Python使用Selenium自动实现表单填写之龙年纪念币预约(附源码,源码有注释解析,已测试可用

    声明 :本文只做技术交流,不可用代码为商业用途,文末有源码下载,已测试可用。 Part 1 配置文件改写(源码 有详细的注释说明 读取配置文件,自己组数据库,录入信息 配置文件 Part 2 主函数 每一期的xpath路径都不一样 所以需要提前去网站获取 新的 Xpath 具体方法如下

    2024年02月01日
    浏览(40)
  • C#使用跨平台的PdfSharpCore开源库生成PDF文件

            在进行项目开发中,需要将C#程序的一些文本内容导出为PDF文件(能够根据文本自动分行分页),并且要求这个生成PDF文件的程序是可跨平台的;实现类似效果: ①将程序的文本内容导出为PDF文件; ②能够将文本内容自动分行分页【且可添加页眉、页脚、页码、

    2024年02月16日
    浏览(58)
  • node使用fs模块(四)—— 文件夹的使用(创建、读取、删除)

    创建、读取、删除都有同步方法,方法后面加上sync即可。不过多解释了。 参数1: path——读取的文件路径( 必填 ) 参数2: option——读取的文件配置(可选) recursive 是否递归创建,默认为false 参数3: callback——读取回调函数( 必填 ) 参数1: path——读取的文件路径(

    2024年02月06日
    浏览(69)
  • 怎样控制键盘按键自动填写网页表单

    浏览器中使用模拟键盘按键填写网页表单,不但可以完成数据输入,输入时还能真实地 触发键盘元素绑定的键盘事件 。 打开木头浏览器的工具菜单,进入项目管理容器,创建“填写内容”步骤,并打开百度网站测试。 1、输入键盘对应的字符,包括字母、数字和符号,但不

    2024年02月09日
    浏览(56)
  • 51-JS鼠标,键盘,表单,粘贴板,窗口事件,遍历节点树,DOM操作:创建/添加,删除,替换

    1.鼠标事件 1.1双击事件 dblclick 1.2鼠标移入,鼠标移出 mouseover,mouseout             支持事件冒泡(会传播) mouseenter,mouseleave        不支持事件冒泡(不会传播)

    2024年01月18日
    浏览(70)
  • 网页表单文本框的自动填写(四种方法)

    随着应用系统从客户端+服务器模式,逐渐发展成浏览器+服务器模式。越来越多的操作是基于浏览器来完成的,在输入数据时可以方便的使用批量操作工具,提高工作效率。 在使用浏览器自动填写网页表单时,遇到最多的就是文本输入框了。 1、通过修改元素的value属性完成填

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包