通常情况下,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表单域操作的资料请关注代码网其它相关文章!
发表评论