C#進(jìn)行PDF表單域的創(chuàng)建填寫與刪除操作
通常情況下,PDF文件是不可編輯的,但PDF表單提供了一些可編輯區(qū)域,允許用戶填寫和提交信息。PDF表單通常用于收集信息、反饋或進(jìn)行在線申請,是許多行業(yè)中數(shù)據(jù)收集和交換的重要工具。
PDF表單可以包含各種類型的輸入控件,如文本框、復(fù)選框、下拉菜單、單選按鈕等。本文將介紹如何使用C# 和一個免費(fèi).NET庫來操作PDF表單,包括以下三個示例:
安裝免費(fèi).NET PDF庫: Free Spire.PDF for .NET (可通過 NuGet安裝,或下載后手動引用dll
PM> Install-Package FreeSpire.PDF
常見PDF表單域
Free Spire.PDF for .NET 支持創(chuàng)建、操作多種PDF表域,包括文本框、復(fù)選框、組合框、列表框和單選按鈕等。下表列出了一些常見的域及其在該免費(fèi)庫中對應(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坐標(biāo) 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, "選項(xiàng)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, "選項(xiàng)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("選項(xiàng)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("選項(xiàng)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 "選項(xiàng)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#進(jìn)行PDF表單域的創(chuàng)建填寫與刪除操作的詳細(xì)內(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é),幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-02-02C#連接ClickHouse數(shù)據(jù)庫的步驟指南
在 C# 中連接 ClickHouse 數(shù)據(jù)庫,您可以使用 ClickHouse.Client 庫,這個庫提供了對 ClickHouse 數(shù)據(jù)庫的高效訪問,以下是詳細(xì)的步驟指南,幫助您在 C# 項(xiàng)目中連接和操作 ClickHouse 數(shù)據(jù)庫,需要的朋友可以參考下2024-12-12C#操作圖片讀取和存儲SQLserver實(shí)現(xiàn)代碼
用C#將Image轉(zhuǎn)換成byte[]并插入數(shù)據(jù)庫/將圖片數(shù)據(jù)從SQLserver中取出來并顯示到pictureBox控件上,接下來將為你詳細(xì)介紹下實(shí)現(xiàn)步驟,感興趣的你可以參考下2013-03-03C#實(shí)現(xiàn)EPL?II格式打印與打印測試
這篇文章介紹了C#實(shí)現(xiàn)EPL?II格式打印與打印測試的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06