C#設(shè)置PDF表單不可編輯以及提取表單數(shù)據(jù)的操作
PDF表單是PDF中的可編輯區(qū)域,允許用戶填寫指定信息。當(dāng)表單填寫完成后,有時(shí)候我們可能需要將其設(shè)置為不可編輯,以保護(hù)表單內(nèi)容的完整性和可靠性?;蛘咝枰獜腜DF表單中提取數(shù)據(jù)以便后續(xù)處理或分析。
之前文章詳細(xì)介紹過(guò)如何使用免費(fèi)Spire.PDF庫(kù)通過(guò)C# 創(chuàng)建、填寫表單,本文將繼續(xù)介紹該免費(fèi).NET PDF庫(kù)支持的另外兩種操作PDF表單的功能,即:
- 使用C# 設(shè)置PDF表單不可編輯(PDF扁平化)
- 使用C# 提取PDF表單數(shù)據(jù)
免費(fèi)庫(kù)安裝(2種方法):
Free Spire.PDF for .NET 免費(fèi)庫(kù)支持兩種安裝方式:
- 通過(guò) NuGet安裝:http://www.nuget.org/packages/FreeSpire.PDF/
- 點(diǎn)擊下載產(chǎn)品包,解壓縮后手動(dòng)引用dll
https://www.e-iceblue.com/Download/download-pdf-for-net-free.html
使用C# 設(shè)置PDF表單不可編輯(PDF扁平化)
PDF 表單如文本框、復(fù)選框、組合框等都是可編輯或可更改狀態(tài),如何想要鎖定這些區(qū)域,我們需要將PDF表單設(shè)置為不可編輯狀態(tài),即PDF扁平化。在Free Spire.PDF中, 我們可以通過(guò)將其提供的 PdfDocument.Form.IsFlatten 屬性設(shè)置為 "true" 來(lái)鎖定PDF表單不可編輯。
簡(jiǎn)單代碼示例:
using Spire.Pdf; namespace FlattenAllFormFields { class Program { static void Main(string[] args) { //加載PDF文件 PdfDocument pdf = new PdfDocument(); pdf.LoadFromFile("PDF表單.pdf"); //設(shè)置所有表單不可編輯 pdf.Form.IsFlatten = true; //保存生成文件 pdf.SaveToFile("扁平PDF.pdf"); } } }
以上示例一鍵鎖定了PDF文件中的所有表單,如果僅需鎖定某個(gè)指定的表單域,可以參考如下代碼片段:
//獲取PDF表單 PdfFormWidget formWidget = (PdfFormWidget)pdf.Form; //通過(guò)表單名獲取指定表單域 PdfField form = formWidget.FieldsWidget["姓名"]; //通過(guò)索引獲取指定表單域 PdfField form = formWidget.FieldsWidget.List[0] as PdfField; //設(shè)置表單不可編輯 form.Flatten = true;
使用C# 提取PDF表單數(shù)據(jù)
在Free Spire.PDF中,每種表單域都提供了對(duì)應(yīng)的類。要實(shí)現(xiàn)PDF表單數(shù)據(jù)的提取,我們需要先確定表單域的類型,然后再使用相應(yīng)類下的屬性來(lái)提取它們的值。
完整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"); //創(chuàng)建StringBuilder對(duì)象 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("文本框內(nèi)容: " + value + "\r\n"); } //獲取列表框的名稱、項(xiàng)目和選定項(xiàng) if (field is PdfListBoxWidgetFieldWidget) { PdfListBoxWidgetFieldWidget listBoxField = field as PdfListBoxWidgetFieldWidget; string name = listBoxField.Name; sb.Append("列表框名稱: " + name + "\r\n"); sb.Append("列表框項(xiàng)目: \r\n"); PdfListWidgetItemCollection items = listBoxField.Values; foreach (PdfListWidgetItem item in items) { sb.Append(item.Value + "\r\n"); } string selectedValue = listBoxField.SelectedValue; sb.Append("列表框選定項(xiàng): " + selectedValue + "\r\n"); } //獲取組合框字段的名稱、項(xiàng)目和選定項(xiàng) if (field is PdfComboBoxWidgetFieldWidget) { PdfComboBoxWidgetFieldWidget comBoxField = field as PdfComboBoxWidgetFieldWidget; string name = comBoxField.Name; sb.Append("組合框名稱: " + name + "\r\n"); sb.Append("組合框項(xiàng)目: \r\n"); PdfListWidgetItemCollection items = comBoxField.Values; foreach (PdfListWidgetItem item in items) { sb.Append(item.Value + "\r\n"); } string selectedValue = comBoxField.SelectedValue; sb.Append("組合框選定項(xiàng): " + selectedValue + "\r\n"); } //獲取單選按鈕的名稱和所選項(xiàng) if (field is PdfRadioButtonListFieldWidget) { PdfRadioButtonListFieldWidget radioBtnField = field as PdfRadioButtonListFieldWidget; string name = radioBtnField.Name; sb.Append("單選按鈕名稱: " + name + "\r\n"); string selectedValue = radioBtnField.SelectedValue; sb.Append("單選按鈕選定項(xiàng): " + selectedValue + "\r\n"); } //獲取復(fù)選框的名稱和狀態(tài) if (field is PdfCheckBoxWidgetFieldWidget) { PdfCheckBoxWidgetFieldWidget checkBoxField = field as PdfCheckBoxWidgetFieldWidget; string name = checkBoxField.Name; sb.Append("復(fù)選框名稱: " + name + "\r\n"); bool status = checkBoxField.Checked; if (status) { sb.Append("復(fù)選框狀態(tài): 已選中 \r\n"); } else { sb.Append("復(fù)選框狀態(tài): 未選中 \r\n"); } } sb.Append("\n"); } //將提取的數(shù)據(jù)寫入txt文件 File.WriteAllText("提取PDF表單.txt", sb.ToString()); doc.Dispose(); } } }
提取PDF表單數(shù)據(jù)的效果圖:
總結(jié)
免費(fèi)Spire.PDF支持多種對(duì)PDF表單的操作,使用它,我們可以通過(guò)C# 輕松實(shí)現(xiàn)鎖定PDF表單以確保表單不被篡改或編輯,或者通過(guò)C# 快速提取PDF表單數(shù)據(jù)并用于各種用途,如數(shù)據(jù)分析、報(bào)告生成等。
以上就是C#設(shè)置PDF表單不可編輯以及提取表單數(shù)據(jù)的操作的詳細(xì)內(nèi)容,更多關(guān)于C#設(shè)置PDF表單不可編輯的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#確保只有一個(gè)實(shí)例在運(yùn)行的方法
這篇文章主要介紹了C#確保只有一個(gè)實(shí)例在運(yùn)行的方法,涉及C#進(jìn)程操作的相關(guān)技巧,需要的朋友可以參考下2015-05-05C#利用原圖和水印圖的重疊簡(jiǎn)單實(shí)現(xiàn)水印的方法
這篇文章主要介紹了C#利用原圖和水印圖的重疊簡(jiǎn)單實(shí)現(xiàn)水印的方法,實(shí)例演示了完整的水印操作類實(shí)現(xiàn)方法,需要的朋友可以參考下2016-04-04C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡(jiǎn)單使用
這篇文章主要介紹了C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡(jiǎn)單使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02將數(shù)組中指定數(shù)量的元素移動(dòng)數(shù)組后面的實(shí)現(xiàn)代碼
本篇文章是對(duì)將數(shù)組中指定數(shù)量的元素移動(dòng)數(shù)組后面的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06C#使用泛型方法設(shè)計(jì)實(shí)現(xiàn)單向鏈表詳解
這篇文章主要為大家詳細(xì)介紹了C#如何使用泛型方法設(shè)計(jì)實(shí)現(xiàn)一個(gè)單向鏈表,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02