使用IRONPDF 如何使用.NET SDK在C#中創建、填寫和提取PDF表單 Curtis Chau 更新:2026年2月27日 下載 IronPDF NuGet 下載 DLL 下載 Windows Installer 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 互動式 PDF 表單將靜態文件轉換為資料收集工具,您可以完全透過程式碼產生和處理資料。 無論是建立病患入院入口網站、自動化貸款申請,或是從資料庫產生數千個預填的合規表格, IronPDF為.NET開發人員提供了一個統一的 API,用於執行每個表單任務——建立、欄位填充、資料擷取和批次處理。 本指南將透過可直接匯入.NET 10 專案的 C# 程式碼範例,逐步完成每項任務。 如何開始使用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 所需的一切。 該軟體包面向.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 表單(一種較舊的 Adobe 專有格式)不同,AcroForms 可以在 Adobe 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 中的欄位名稱。 這個名稱是你在之後以程式設計方式讀取或寫入欄位值時會用到的。 選擇與資料模型相符的名稱-如果要從資料庫物件填入此表單,請根據物件的屬性命名欄位。 輸出 文字輸入框和文字區域會顯示為可編輯的文字欄位。 具有匹配 name 屬性的單選按鈕會組合在一起,因此只能選擇一個。 複選框會顯示為可切換欄位。 產生的 PDF 檔案可以在任何標準檢視器中打開,所有表單欄位都可供填寫。 這種基於 HTML 的方法適用於以下情況:表單設計已經以網頁的形式存在;您的團隊更喜歡用標記語言來維護表單;或者您需要產生與應用程式現有 HTML 範本完全匹配的表單。 渲染器處理所有 PDF 規格細節。 如何透過程式設計方式為 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表單? 許多工作流程都始於一個預先存在的 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.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 表單結構,而無需硬編碼欄位名稱。 輸出 空條件運算子 ?. 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 文件,該文件是針對該記錄定制的。 對於高吞吐量場景,使用 await 與 Task.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 表單功能在您自己的專案中的應用,或查看生產部署的授權選項。 常見問題解答 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 機器人,結合科技與創意的樂趣。 相關文章 更新2026年3月1日 如何在.NET中使用IronPDF創建PDF檔案(C#教程) 發現用於創建C# PDF文件的有效方法,提升您的編碼技能並簡化您的項目。立即閱讀文章! 閱讀更多 更新2026年2月27日 如何在C#中合併PDF文件 使用 IronPDF 合併 PDF 文件。學習如何使用簡單的 VB.NET 程式碼將多個 PDF 文件合併成一個文檔。包含逐步範例。 閱讀更多 更新2026年3月1日 C# PDFWriter教程,適用於.NET 10開發者 通過這個面向開發人員的逐步指南,學習如何使用C# PDFWriter高效創建PDF。閱讀本文以提高您的技能! 閱讀更多 適用於.NET Core的PDF API:在C#中生成和編輯PDF如何在UWP應用程序中使用C#...