C#進行PDF表單域的創(chuàng)建填寫與刪除操作
通常情況下,PDF文件是不可編輯的,但PDF表單提供了一些可編輯區(qū)域,允許用戶填寫和提交信息。PDF表單通常用于收集信息、反饋或進行在線申請,是許多行業(yè)中數(shù)據(jù)收集和交換的重要工具。
PDF表單可以包含各種類型的輸入控件,如文本框、復(fù)選框、下拉菜單、單選按鈕等。本文將介紹如何使用C# 和一個免費.NET庫來操作PDF表單,包括以下三個示例:
安裝免費.NET PDF庫: Free Spire.PDF for .NET (可通過 NuGet安裝,或下載后手動引用dll
PM> Install-Package FreeSpire.PDF
常見PDF表單域
Free Spire.PDF for .NET 支持創(chuàng)建、操作多種PDF表域,包括文本框、復(fù)選框、組合框、列表框和單選按鈕等。下表列出了一些常見的域及其在該免費庫中對應(yīng)的類名。
| 表單域名 | 類名 |
|---|---|
| 文本域 | PdfTextBoxField |
| 復(fù)選框 | PdfCheckBoxField |
| 組合框 | PdfComboBoxField |
| 列表框 | PdfListBoxField |
| 單選按鈕 | PdfRadioButtonListField |
| 普通按鈕 | PdfButtonField |
| 簽名域 | PdfSignatureField |
使用C# 創(chuàng)建PDF表單域
使用Free Spire.PDF制作表單域,需要先創(chuàng)建以上各表單域類的對象,然后通過 Bounds 屬性設(shè)置表單域的位置和大小,最后再通過PdfFormFieldCollection.Add() 方法將表單域繪制到PDF頁面指定位置處。
以下是如何在PDF中創(chuàng)建上述常見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)
{
//創(chuàng)建PdfDocument對象
PdfDocument pdf = new PdfDocument();
//添加一頁
PdfPageBase page = pdf.Pages.Add();
//初始化x、y坐標
float baseX = 60;
float baseY = 20;
//創(chuàng)建兩個畫刷
PdfSolidBrush brush1 = new PdfSolidBrush(new PdfRGBColor(Color.Brown));
PdfSolidBrush brush2 = new PdfSolidBrush(new PdfRGBColor(Color.Black));
//創(chuàng)建字體
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;
//添加兩個復(fù)選框
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("少數(shù)民族", 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("財務(wù)", "財務(wù)"));
comboBoxField.Items.Add(new PdfListFieldItem("技術(shù)", "技術(shù)"));
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中的所有表單字段,然后確定其表單類型,最后再填寫數(shù)據(jù)或從預(yù)定列表中選擇值。
以下是如何填充現(xiàn)有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;
}
}
//判斷該表單域是否為復(fù)選框
if (field is PdfCheckBoxWidgetFieldWidget)
{
//設(shè)置復(fù)選框的"已選中"狀態(tài)
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);
}
}
}輸出結(jié)果:

使用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表單域的創(chuàng)建填寫與刪除操作的詳細內(nèi)容,更多關(guān)于C# PDF表單域操作的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C# 使用Microsoft Edge WebView2的相關(guān)總結(jié)
這篇文章主要介紹了C# 使用Microsoft Edge WebView2的相關(guān)總結(jié),幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下2021-02-02
C#連接ClickHouse數(shù)據(jù)庫的步驟指南
在 C# 中連接 ClickHouse 數(shù)據(jù)庫,您可以使用 ClickHouse.Client 庫,這個庫提供了對 ClickHouse 數(shù)據(jù)庫的高效訪問,以下是詳細的步驟指南,幫助您在 C# 項目中連接和操作 ClickHouse 數(shù)據(jù)庫,需要的朋友可以參考下2024-12-12
C#操作圖片讀取和存儲SQLserver實現(xiàn)代碼
用C#將Image轉(zhuǎn)換成byte[]并插入數(shù)據(jù)庫/將圖片數(shù)據(jù)從SQLserver中取出來并顯示到pictureBox控件上,接下來將為你詳細介紹下實現(xiàn)步驟,感興趣的你可以參考下2013-03-03

