跳過到頁腳內容
使用IRONPDF

如何使用.NET SDK在C#中創建、填寫和提取PDF表單

互動式 PDF 表單將靜態文件轉換為資料收集工具,您可以完全透過程式碼產生和處理資料。 無論是建立病患入院入口網站、自動化貸款申請,或是從資料庫產生數千個預填的合規表格, IronPDF為.NET開發人員提供了一個統一的 API,用於執行每個表單任務——建立、欄位填充、資料擷取和批次處理。

本指南將透過可直接匯入.NET 10 專案的 C# 程式碼範例,逐步完成每項任務。

PDF Forms .NET SDK:使用IronPDF在 C# 中建立可填寫 PDF:圖 1 - IronPDF

如何開始使用IronPDF?

IronPDF可在NuGet上取得,只需大約一分鐘即可新增至任何.NET專案。 在 Visual Studio 中開啟程式包管理器控制台並執行:

Install-Package IronPdf
Install-Package IronPdf
SHELL

您也可以在NuGet套件管理器 GUI 中搜尋IronPDF ,或使用.NET CLI 新增它 dotnet add package IronPdf。 無需額外的執行時間依賴項或設定檔 - 該程式庫自帶在 Windows、Linux、macOS、Docker 和 Kubernetes 上渲染 PDF 所需的一切。

PDF Forms .NET SDK:使用IronPDF在 C# 中建立可填寫 PDF:圖 3 - 安裝

該軟體包面向.NET Framework 4.6.2+ 和所有現代.NET版本,包括.NET 8、 .NET 9 和.NET 10。安裝軟體包後,在文件頂部新增 using IronPdf;,即可產生您的第一個 PDF 表單。

跨平台部署的靈活性在生產環境中至關重要。 無論您的應用程式是針對 Windows Server、Linux 容器或 Azure 函數應用, IronPDF都能穩定運作—相同的程式碼在每個環境中都會產生相同的輸出。

PDF表單為何有效? 了解 AcroForms

在編寫程式碼之前,了解你要建立的是什麼很有幫助。 AcroForm 規格(自 1998 年以來一直是 PDF 標準的一部分)定義了任何標準 PDF 檢視器都可以顯示和填寫的互動式表單欄位。 AcroForms 支援文字欄位、複選框、單選按鈕、下拉清單、列錶框和簽名欄位。

AcroForms 是IronPDF創建和讀取的格式。 與 XFA 表單(一種較舊的 Adob​​e 專有格式)不同,AcroForms 可以在 Adob​​e Reader、基於瀏覽器的 PDF 檢視器和行動應用程式之間使用,而不會出現相容性問題。 使用IronPDF建立 PDF 表單時,輸出結果是一個符合標準的 AcroForm PDF,任何檢視器都可以開啟它。

表單中的每個欄位都包含名稱、類型和值。 名稱是您以程式設計方式讀取或寫入資料時所使用的鍵。 文件中的欄位名稱必須是唯一的-如果您按名稱填入表單,但欄位名稱不完全匹配,則寫入作業不會產生任何效果,這是從資料庫架構填入表單時常見的錯誤來源。

字段類型決定了可接受的值。 文字欄位可以接受任何字串。 複選框只能選擇"是"或"否"。 單選按鈕接受所選選項的字串值。 下拉式選單接受所選項目的字串值,該值必須是建立該欄位時定義的選項之一。

如何從HTML建立PDF表單?

建立可填寫 PDF 表單最快的方法是將其編寫為標準 HTML 格式並進行轉換。 每個 HTML 表單元素都直接映射到其對應的 AcroForm 元素:<input type="text"> 變成文字字段,<input type="checkbox"> 變成複選框,<select> 變成下拉列表,<textarea> 變成多行文字字段。

透過在渲染器的 @@--CODE-490--CODE-489 ... 如果沒有該標誌,HTML 表單元素將呈現為靜態視覺內容——您可以在 PDF 中看到它們,但它們不是互動式欄位。

using IronPdf;

// HTML with form elements for PDF generation
string formHtml = @"
<html>
<body>
    <h2>Customer Registration</h2>
    <form>
        <label>Full Name:</label><br/>
        <input type='text' name='fullName'><br/>
        <label>Email Address:</label><br/>
        <input type='email' name='email'><br/>
        <label>Account Type:</label><br/>
        <select name='accountType'>
            <option value='personal'>Personal</option>
            <option value='business'>Business</option>
        </select><br/>
        <label>Newsletter:</label><br/>
        <input type='checkbox' name='newsletter' value='yes'>Subscribe<br/>
        <label>Comments:</label><br/>
        <textarea name='comments' rows='4' style='width:300px'></textarea>
    </form>
</body>
</html>";

// Enable form field generation from HTML
ChromePdfRenderer renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

// Render and save the PDF with interactive fields
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
pdf.SaveAs("registration-form.pdf");
using IronPdf;

// HTML with form elements for PDF generation
string formHtml = @"
<html>
<body>
    <h2>Customer Registration</h2>
    <form>
        <label>Full Name:</label><br/>
        <input type='text' name='fullName'><br/>
        <label>Email Address:</label><br/>
        <input type='email' name='email'><br/>
        <label>Account Type:</label><br/>
        <select name='accountType'>
            <option value='personal'>Personal</option>
            <option value='business'>Business</option>
        </select><br/>
        <label>Newsletter:</label><br/>
        <input type='checkbox' name='newsletter' value='yes'>Subscribe<br/>
        <label>Comments:</label><br/>
        <textarea name='comments' rows='4' style='width:300px'></textarea>
    </form>
</body>
</html>";

// Enable form field generation from HTML
ChromePdfRenderer renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

// Render and save the PDF with interactive fields
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
pdf.SaveAs("registration-form.pdf");
$vbLabelText   $csharpLabel

每個 HTML 輸入框的 name 屬性都會成為 PDF 中的欄位名稱。 這個名稱是你在之後以程式設計方式讀取或寫入欄位值時會用到的。 選擇與資料模型相符的名稱-如果要從資料庫物件填入此表單,請根據物件的屬性命名欄位。

輸出

PDF Forms .NET SDK:使用IronPDF在 C# 中建立可填寫 PDF:圖 4 - PDF 輸出

文字輸入框和文字區域會顯示為可編輯的文字欄位。 具有匹配 name 屬性的單選按鈕會組合在一起,因此只能選擇一個。 複選框會顯示為可切換欄位。 產生的 PDF 檔案可以在任何標準檢視器中打開,所有表單欄位都可供填寫。

這種基於 HTML 的方法適用於以下情況:表單設計已經以網頁的形式存在;您的團隊更喜歡用標記語言來維護表單;或者您需要產生與應用程式現有 HTML 範本完全匹配的表單。 渲染器處理所有 PDF 規格細節。

PDF Forms .NET SDK:使用IronPDF在 C# 中建立可填寫 PDF:圖 5 - 功能

如何透過程式設計方式為 PDF 新增表單欄位?

當需要精確的座標控制,或在現有 PDF 文件中新增表單欄位時,程序化表單欄位 API可讓您直接控制每個欄位的位置、大小和預設值。

建立具有明確頁面座標的字段物件。 原點位於頁面左下角,x 軸向右遞增,y 軸向上遞增-這是 PDF 規格中使用的相同座標系。

using IronPdf;
using IronSoftware.Forms;

// Generate a base PDF document to add fields to
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(
    "<h1>Application Form</h1><p>Please complete all fields below.</p>");

// Text field: name, default value, page index, x, y, width, height
var nameField = new TextFormField("applicantName", "", 0, 50, 700, 200, 20);
pdf.Form.Add(nameField);

// Checkbox field with default unchecked state
var termsCheckbox = new CheckboxFormField("agreeTerms", "no", 0, 50, 650, 15, 15);
pdf.Form.Add(termsCheckbox);

// Dropdown with a defined list of options
var departmentCombo = new ComboboxFormField(
    "department", "", 0, 50, 600, 150, 20,
    new List<string> { "Engineering", "Marketing", "Sales", "Support" });
pdf.Form.Add(departmentCombo);

// Save the output document
pdf.SaveAs("application-with-fields.pdf");
using IronPdf;
using IronSoftware.Forms;

// Generate a base PDF document to add fields to
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(
    "<h1>Application Form</h1><p>Please complete all fields below.</p>");

// Text field: name, default value, page index, x, y, width, height
var nameField = new TextFormField("applicantName", "", 0, 50, 700, 200, 20);
pdf.Form.Add(nameField);

// Checkbox field with default unchecked state
var termsCheckbox = new CheckboxFormField("agreeTerms", "no", 0, 50, 650, 15, 15);
pdf.Form.Add(termsCheckbox);

// Dropdown with a defined list of options
var departmentCombo = new ComboboxFormField(
    "department", "", 0, 50, 600, 150, 20,
    new List<string> { "Engineering", "Marketing", "Sales", "Support" });
pdf.Form.Add(departmentCombo);

// Save the output document
pdf.SaveAs("application-with-fields.pdf");
$vbLabelText   $csharpLabel

TextFormField 建立一個單行文字輸入框。 CheckboxFormField 放置一個可切換的複選框。 ComboboxFormField 建立一個僅限於所提供選項清單的下拉清單。每個類別都公開了用於設定 Tab 鍵順序、工具提示文字、唯讀狀態和必填欄位標誌的附加屬性。

HTML 轉換和程式化欄位建立這兩種方法可以結合起來使用。 從 HTML 產生基本佈局以實現高效的模板控制,然後使用 API 新增具有精確定位的專用欄位。 表單填寫和編輯指南涵蓋了所有可用的欄位類型。

PDF Forms .NET SDK:使用IronPDF在 C# 中建立可填寫 PDF:圖 6 - PDF Forms .NET SDK - IronPDF

如何填寫現有的PDF表單?

許多工作流程都始於一個預先存在的 PDF 表單——政府範本、供應商合約或您的組織從合作夥伴收到的標準化申請表。 透過程式自動填寫這些表單,無需重新建立原始設計即可自動產生文件。

使用 PdfDocument.FromFile 載入現有 PDF,使用 FindFormField 按名稱定位每個字段,並為字段的 Value 屬性賦值。

using IronPdf;

// Load the existing PDF containing AcroForm fields
PdfDocument pdf = PdfDocument.FromFile("existing-application.pdf");

// Fill text fields by exact field name
var nameField = pdf.Form.FindFormField("applicantName");
nameField.Value = "Sarah Johnson";

var emailField = pdf.Form.FindFormField("email");
emailField.Value = "sarah.johnson@example.com";

// Set checkbox and radio button values
var termsField = pdf.Form.FindFormField("agreeTerms");
termsField.Value = "Yes";

var accountTypeField = pdf.Form.FindFormField("accountType");
accountTypeField.Value = "business";

// Set dropdown selection to one of its defined options
var departmentField = pdf.Form.FindFormField("department");
departmentField.Value = "Engineering";

// Save the completed form
pdf.SaveAs("completed-application.pdf");
using IronPdf;

// Load the existing PDF containing AcroForm fields
PdfDocument pdf = PdfDocument.FromFile("existing-application.pdf");

// Fill text fields by exact field name
var nameField = pdf.Form.FindFormField("applicantName");
nameField.Value = "Sarah Johnson";

var emailField = pdf.Form.FindFormField("email");
emailField.Value = "sarah.johnson@example.com";

// Set checkbox and radio button values
var termsField = pdf.Form.FindFormField("agreeTerms");
termsField.Value = "Yes";

var accountTypeField = pdf.Form.FindFormField("accountType");
accountTypeField.Value = "business";

// Set dropdown selection to one of its defined options
var departmentField = pdf.Form.FindFormField("department");
departmentField.Value = "Engineering";

// Save the completed form
pdf.SaveAs("completed-application.pdf");
$vbLabelText   $csharpLabel

FindFormField 根據表單建立期間指派的名稱定位欄位。 欄位名稱符合區分大小寫且必須完全一致-"applicantName"和"ApplicantName"是不同的欄位。 如果您正在填寫第三方表單,並且不確定欄位名稱,請遍歷 pdf.Form 以列印每個欄位的名稱,然後再嘗試按名稱填寫。

輸入

PDF Forms .NET SDK:使用IronPDF在 C# 中建立可填寫 PDF:圖 7 - PDF 輸入範例

輸出

PDF Forms .NET SDK:使用IronPDF在 C# 中建立可填寫 PDF:圖 8 - 已填寫的 PDF 輸出

不同的欄位類型需要對應的數值格式。 文字字段接受任何字串。 複選框只能選擇"是"或"否"。 單選按鈕接受所需選項的字串值。 下拉式選單接受已定義選項之一的字串值-設定不在選項清單中的值無效。

處理具有許多欄位的表單時,直接遍歷 pdf.Form,而不是重複呼叫 FindFormField。 對於批次操作來說,迭代效率更高,並且避免了對欄位集合進行重複的線性搜尋。

如何讀取和提取表單欄位資料?

從提交的 PDF 中提取表單資料是相反的操作:載入已完成的表單,然後讀取每個欄位的名稱和當前值以進行後續處理。 此模式支援自動化資料輸入工作流程,使用者填寫 PDF 表格並上傳,應用程式即可處理數據,無需手動輸入資料。

using IronPdf;

// Load the completed, submitted PDF form
PdfDocument pdf = PdfDocument.FromFile("submitted-form.pdf");

// Iterate all fields to extract names, values, and types
Console.WriteLine("Form Data Extraction:");
Console.WriteLine("----------------------");
foreach (var field in pdf.Form)
{
    Console.WriteLine($"Field: {field.Name}");
    Console.WriteLine($"Value: {field.Value}");
    Console.WriteLine($"Type:  {field.GetType().Name}");
    Console.WriteLine();
}

// Or retrieve specific fields for targeted processing
var customerName  = pdf.Form.FindFormField("applicantName")?.Value ?? "Not provided";
var customerEmail = pdf.Form.FindFormField("email")?.Value ?? "Not provided";
Console.WriteLine($"Customer: {customerName} ({customerEmail})");
using IronPdf;

// Load the completed, submitted PDF form
PdfDocument pdf = PdfDocument.FromFile("submitted-form.pdf");

// Iterate all fields to extract names, values, and types
Console.WriteLine("Form Data Extraction:");
Console.WriteLine("----------------------");
foreach (var field in pdf.Form)
{
    Console.WriteLine($"Field: {field.Name}");
    Console.WriteLine($"Value: {field.Value}");
    Console.WriteLine($"Type:  {field.GetType().Name}");
    Console.WriteLine();
}

// Or retrieve specific fields for targeted processing
var customerName  = pdf.Form.FindFormField("applicantName")?.Value ?? "Not provided";
var customerEmail = pdf.Form.FindFormField("email")?.Value ?? "Not provided";
Console.WriteLine($"Customer: {customerName} ({customerEmail})");
$vbLabelText   $csharpLabel

Form 屬性公開文件中所有欄位的可枚舉集合。 每個字段物件提供其 Name、當前 Value 和類型資訊。 通用表單處理器使用此模式來處理任何 PDF 表單結構,而無需硬編碼欄位名稱。

輸出

PDF Forms .NET SDK:使用IronPDF在 C# 中建立可填寫 PDF:圖 9 - 控制台輸出

空條件運算子 ?. on FindFormField 處理預期欄位缺失的情況 - 在處理來自多個來源的表單時非常有用,這些表單可能具有略微不同的欄位結構。 始終提供備用值或進行空值檢查,而不是假設欄位存在。

擷取的資料可直接與 Entity Framework 或.NET整合以進行資料庫寫入,進行 JSON 序列化以進行 API 回應,並產生 CSV 檔案以進行報表。 當您還需要從掃描或基於影像的表單提交中提取數據,而這些欄位沒有以數位方式填寫時,可以將IronPDF與IronOCR結合使用。

如何大規模產生個人化表單?

PDF表單自動化的最大應用情境是大量產生-產生數百上千份預先填入了來自資料庫、API或CSV檔案資料的表單。一個簡單的循環就能完成這項工作,無需任何額外的基礎設施。

using IronPdf;

// Retrieve customer records from your data source
var customers = GetCustomersFromDatabase();

ChromePdfRenderer renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

foreach (var customer in customers)
{
    // Build an HTML template with static data pre-filled and interactive fields for user input
    string formHtml = $@"
    <html><body>
        <h2>Annual Review Form</h2>
        <p>Customer: {customer.Name}</p>
        <p>Account:  {customer.AccountNumber}</p>
        <label>Satisfaction Rating (1-5):</label><br/>
        <input type='text' name='rating' maxlength='1'><br/>
        <label>Feedback:</label><br/>
        <textarea name='feedback' rows='5' style='width:100%'></textarea>
    </body></html>";

    PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
    pdf.SaveAs($"review-form-{customer.AccountNumber}.pdf");
}
using IronPdf;

// Retrieve customer records from your data source
var customers = GetCustomersFromDatabase();

ChromePdfRenderer renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

foreach (var customer in customers)
{
    // Build an HTML template with static data pre-filled and interactive fields for user input
    string formHtml = $@"
    <html><body>
        <h2>Annual Review Form</h2>
        <p>Customer: {customer.Name}</p>
        <p>Account:  {customer.AccountNumber}</p>
        <label>Satisfaction Rating (1-5):</label><br/>
        <input type='text' name='rating' maxlength='1'><br/>
        <label>Feedback:</label><br/>
        <textarea name='feedback' rows='5' style='width:100%'></textarea>
    </body></html>";

    PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
    pdf.SaveAs($"review-form-{customer.AccountNumber}.pdf");
}
$vbLabelText   $csharpLabel

HTML 範本直接嵌入靜態客戶數據,因此收件者可以看到預先列印的姓名和帳號,並提供互動式欄位供他們提供所需數據。 批次處理數百筆記錄只需幾秒鐘即可完成,而手動準備則需要數小時。

循環結構適用於任何資料來源: Entity Framework 查詢、API 回應或 CSV 匯入。 每次迭代都會產生一個完整的、可直接分發的 PDF 文件,該文件是針對該記錄定制的。 對於高吞吐量場景,使用 awaitTask.WhenAll 並行渲染表單 - IronPDF 的 RenderHtmlAsPdfAsync 方法支援完全非同步渲染。

大量產生後,表單通常會被打包成 ZIP 存檔,以便使用IronZIP進行分發、透過電子郵件整合發送、上傳到雲端儲存或路由到電子簽名平台以完成裝訂。

如何在填寫完成後展平或鎖定 PDF 表單?

表單完全填寫並驗證後,通常需要將其鎖定,以防止再編輯其中的值。 扁平化操作會將所有互動式表單欄位轉換為靜態的、不可編輯的視覺內容,同時保留已完成表單的確切外觀。

using IronPdf;

// Load a completed, signed form
PdfDocument pdf = PdfDocument.FromFile("completed-application.pdf");

// Flatten all form fields - converts interactive fields to static content
pdf.Form.Flatten();

// Save the locked, non-editable version
pdf.SaveAs("locked-application.pdf");
using IronPdf;

// Load a completed, signed form
PdfDocument pdf = PdfDocument.FromFile("completed-application.pdf");

// Flatten all form fields - converts interactive fields to static content
pdf.Form.Flatten();

// Save the locked, non-editable version
pdf.SaveAs("locked-application.pdf");
$vbLabelText   $csharpLabel

對於歸檔已完成的表格、產生符合 PDF/A 標準的文件以進行長期儲存以及產生最終副本進行分發而言,展平是正確的方法。 扁平化後,表單資料仍可見,但無法修改。 PDF 拼合指南涵蓋了其他拼合選項,包括選擇性場拼合。

對於需要具有法律約束力的完成情況, IronPDF還支援數位簽名,它以加密方式將簽名者的身分與文件綁定。 數位簽章和表單扁平化用途不同-簽章證明真實性,扁平化防止修改。

下一步計劃是什麼?

.NET中的 PDF 表單涵蓋四個核心操作:從 HTML 或透過 API 建立表單、從資料來源填入現有表單、提取提交的資料以及大量產生個人化副本。 IronPDF透過一致的 API 處理所有這四種情況,相同的程式碼可以在 Windows、Linux、macOS 和容器內運行。

建立 PDF 表單的操作指南涵蓋了所有可用的欄位類型,並附有程式碼範例。 《填寫和編輯表單指南》深入介紹了批次欄位更新、單選按鈕群組和列錶框處理。 IronPDF文件中心提供了完整的 API 參考和進階主題,包括多頁表單、表單欄位驗證以及高容量管道的效能調優。

開始免費試用,探索 PDF 表單功能在您自己的專案中的應用,或查看生產部署的授權選項

PDF Forms .NET SDK:使用IronPDF在 C# 中建立可填寫 PDF:圖 10 - 許可

常見問題解答

IronPDF使用的是什麼PDF表單標準?

IronPDF創建和讀取AcroForms——這是從1998年PDF規範中定義的交互式表單標準。AcroForms得到Adobe Reader、基於瀏覽器的PDF查看器和移動應用的支持,而較舊的XFA格式則兼容性有限。

如何在IronPDF中啟用從HTML創建表單字段?

在調用`RenderHtmlAsPdf`之前設置`renderer.RenderingOptions.CreatePdfFormsFromHtml = true`。如果沒有此標誌,HTML表單元素將被渲染為靜態的視覺內容,而非交互式AcroForm字段。

如何填寫現有PDF表單中的特定字段?

使用`PdfDocument.FromFile`加載PDF,調用`pdf.Form.FindFormField("fieldName")`檢索字段對象,然後將字符串分配給其`Value`屬性。字段名稱匹配是區分大小寫的。使用`pdf.SaveAs`保存結果。

如何從提交的PDF中提取所有表單字段值?

使用`foreach (var field in pdf.Form)`迭代`pdf.Form`,並閱讀每個字段的`Name`和`Value`屬性。對於有針對性的提取,使用`pdf.Form.FindFormField("name")?.Value`與空條件運算符安全地處理缺失的字段。

IronPDF可以在迴圈中從數據庫生成數百個表單嗎?

可以。創建一個設置了`CreatePdfFormsFromHtml = true`的`ChromePdfRenderer`,迭代您的數據記錄,為每個記錄構建HTML字符串,調用`RenderHtmlAsPdf`,並保存每個結果。為了提高吞吐量,使用`RenderHtmlAsPdfAsync`與`Task.WhenAll`進行並行渲染。

PDF表單平整化是什麼?

平整化將所有交互式表單字段轉換為靜態不可編輯的視覺內容,同時保留填寫表單的精確外觀。調用`pdf.Form.Flatten()`然後保存。這樣的結果適合存檔、PDF/A合規以及要求防止字段編輯的分發。

IronPDF可以在Linux和Docker容器中運行嗎?

可以。IronPDF可以運行在Windows、Linux、macOS、Docker和Kubernetes上。同樣的C#代碼可以在所有平台上生成相同的PDF輸出。請參閱文件中的IronPDF Linux和Docker指南以獲取平台特定的配置。

IronPDF支持哪些平台和.NET版本的PDF表單?

IronPDF支持.NET Framework 4.6.2及以上,和所有現代.NET版本,包括.NET 6、.NET 7、.NET 8、.NET 9和.NET 10。它還支持ASP.NET、ASP.NET Core、Blazor Server、Azure Functions和MAUI應用。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me