PDF表單是PDF中的可編輯區域,允許用戶填寫指定信息。當表單填寫完成後,有時候我們可能需要將其設置為不可編輯,以保護表單內容的完整性和可靠性。或者需要從PDF表單中提取數據以便後續處理或分析。 之前文章詳細介紹過如何使用免費Spire.PDF庫通過C# 創建、填寫表單,本文將繼續介紹該免費.NET ...
PDF表單是PDF中的可編輯區域,允許用戶填寫指定信息。當表單填寫完成後,有時候我們可能需要將其設置為不可編輯,以保護表單內容的完整性和可靠性。或者需要從PDF表單中提取數據以便後續處理或分析。
之前文章詳細介紹過如何使用免費Spire.PDF庫通過C# 創建、填寫表單,本文將繼續介紹該免費.NET PDF庫支持的另外兩種操作PDF表單的功能,即:
- 使用C# 設置PDF表單不可編輯(PDF扁平化)
- 使用C# 提取PDF表單數據
免費庫安裝(2種方法):
Free Spire.PDF for .NET 免費庫支持兩種安裝方式:
- 通過 NuGet安裝:http://www.nuget.org/packages/FreeSpire.PDF/
- 點擊下載產品包,解壓縮後手動引用dll
https://www.e-iceblue.com/Download/download-pdf-for-net-free.html
使用C# 設置PDF表單不可編輯(PDF扁平化)
PDF 表單如文本框、覆選框、組合框等都是可編輯或可更改狀態,如果想要鎖定這些區域,我們需要將PDF表單設置為不可編輯狀態,即PDF扁平化。在Free Spire.PDF中, 我們可以通過將其提供的 PdfDocument.Form.IsFlatten 屬性設置為 "true" 來鎖定PDF表單不可編輯。
簡單代碼示例:
using Spire.Pdf; namespace FlattenAllFormFields { class Program { static void Main(string[] args) { //載入PDF文件 PdfDocument pdf = new PdfDocument(); pdf.LoadFromFile("PDF表單.pdf"); //設置所有表單不可編輯 pdf.Form.IsFlatten = true; //保存生成文件 pdf.SaveToFile("扁平PDF.pdf"); } } }
以上示例一鍵鎖定了PDF文件中的所有表單,如果僅需鎖定某個指定的表單域,可以參考如下代碼片段:
//獲取PDF表單 PdfFormWidget formWidget = (PdfFormWidget)pdf.Form; //通過表單名獲取指定表單域 PdfField form = formWidget.FieldsWidget["姓名"]; //通過索引獲取指定表單域 PdfField form = formWidget.FieldsWidget.List[0] as PdfField; //設置表單不可編輯 form.Flatten = true;
使用C# 提取PDF表單數據
在Free Spire.PDF中,每種表單域都提供了對應的類。要實現PDF表單數據的提取,我們需要先確定表單域的類型,然後再使用相應類下的屬性來提取它們的值。
完整C#示例代碼:
using Spire.Pdf; using Spire.Pdf.Fields; using Spire.Pdf.Widget; using System.IO; using System.Text; namespace ExtractFormFieldValues { internal class Program { static void Main(string[] args) { //載入PDF文件 PdfDocument doc = new PdfDocument(); doc.LoadFromFile("PDF表單.pdf"); //創建StringBuilder對象 StringBuilder sb = new StringBuilder(); //獲取PDF表單 PdfFormWidget formWidget = doc.Form as PdfFormWidget; //遍歷表單 for (int i = 0; i < formWidget.FieldsWidget.List.Count; i++) { PdfField field = formWidget.FieldsWidget.List[i] as PdfField; //獲取文本框的名稱和值 if (field is PdfTextBoxFieldWidget) { PdfTextBoxFieldWidget textBoxField = field as PdfTextBoxFieldWidget; string name = textBoxField.Name; string value = textBoxField.Text; sb.Append("文本框名稱: " + name + "\r\n"); sb.Append("文本框內容: " + value + "\r\n"); } //獲取列表框的名稱、項目和選定項 if (field is PdfListBoxWidgetFieldWidget) { PdfListBoxWidgetFieldWidget listBoxField = field as PdfListBoxWidgetFieldWidget; string name = listBoxField.Name; sb.Append("列表框名稱: " + name + "\r\n"); sb.Append("列表框項目: \r\n"); PdfListWidgetItemCollection items = listBoxField.Values; foreach (PdfListWidgetItem item in items) { sb.Append(item.Value + "\r\n"); } string selectedValue = listBoxField.SelectedValue; sb.Append("列表框選定項: " + selectedValue + "\r\n"); } //獲取組合框欄位的名稱、項目和選定項 if (field is PdfComboBoxWidgetFieldWidget) { PdfComboBoxWidgetFieldWidget comBoxField = field as PdfComboBoxWidgetFieldWidget; string name = comBoxField.Name; sb.Append("組合框名稱: " + name + "\r\n"); sb.Append("組合框項目: \r\n"); PdfListWidgetItemCollection items = comBoxField.Values; foreach (PdfListWidgetItem item in items) { sb.Append(item.Value + "\r\n"); } string selectedValue = comBoxField.SelectedValue; sb.Append("組合框選定項: " + selectedValue + "\r\n"); } //獲取單選按鈕的名稱和所選項 if (field is PdfRadioButtonListFieldWidget) { PdfRadioButtonListFieldWidget radioBtnField = field as PdfRadioButtonListFieldWidget; string name = radioBtnField.Name; sb.Append("單選按鈕名稱: " + name + "\r\n"); string selectedValue = radioBtnField.SelectedValue; sb.Append("單選按鈕選定項: " + selectedValue + "\r\n"); } //獲取覆選框的名稱和狀態 if (field is PdfCheckBoxWidgetFieldWidget) { PdfCheckBoxWidgetFieldWidget checkBoxField = field as PdfCheckBoxWidgetFieldWidget; string name = checkBoxField.Name; sb.Append("覆選框名稱: " + name + "\r\n"); bool status = checkBoxField.Checked; if (status) { sb.Append("覆選框狀態: 已選中 \r\n"); } else { sb.Append("覆選框狀態: 未選中 \r\n"); } } sb.Append("\n"); } //將提取的數據寫入txt文件 File.WriteAllText("提取PDF表單.txt", sb.ToString()); doc.Dispose(); } } }
提取PDF表單的效果圖:
總結
免費Spire.PDF支持多種對PDF表單的操作,使用它,我們可以通過C# 輕鬆實現鎖定PDF表單以確保表單不被篡改或編輯,或者通過C# 快速提取PDF表單數據並用於各種用途,如數據分析、報告生成等。
如有興趣瞭解更多.NET程式中操作PDF文檔的示例,可點擊:Spire.PDF中文教程