当前位置: 代码网 > it编程>编程语言>C# > C#进行PDF表单域的创建填写与删除操作

C#进行PDF表单域的创建填写与删除操作

2024年05月28日 C# 我要评论
通常情况下,pdf文件是不可编辑的,但pdf表单提供了一些可编辑区域,允许用户填写和提交信息。pdf表单通常用于收集信息、反馈或进行在线申请,是许多行业中数据收集和交换的重要工具。pdf表单可以包含各

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

pdf表单可以包含各种类型的输入控件,如文本框、复选框、下拉菜单、单选按钮等。本文将介绍如何使用c# 和一个免费.net库来操作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表单域

填充表单域需要先获取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表单域

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");
        }
    }
}

以上就是c#进行pdf表单域的创建填写与删除操作的详细内容,更多关于c# pdf表单域操作的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com