Jak tworzyć, wypełniać i wyodrębniać formularze PDF w C# z użyciem SDK .NET
Interaktywne formularze PDF zamieniają statyczne dokumenty w narzędzia do zbierania danych, które można generować i przetwarzać całkowicie w kodzie. Niezależnie od tego, czy tworzysz portale do rejestracji pacjentów, automatyzujesz wnioski kredytowe, czy generujesz tysiące wstępnie wypełnionych formularzy zgodności z bazy danych, IronPDF zapewnia programistom .NET jeden, spójny interfejs API do każdego zadania związanego z formularzami — tworzenia, wypełniania pól, wyciągania danych i przetwarzania zbiorczego.
W niniejszym przewodniku omówiono każde z tych zadań wraz z działającymi przykładami kodu w języku C#, które można bezpośrednio wstawić do projektu .NET 10.

Jak rozpocząć pracę z IronPDF?
IronPDF jest dostępny w NuGet, a dodanie go do dowolnego projektu .NET zajmuje około minuty. Otwórz konsolę menedżera pakietów w Visual Studio i uruchom:
Install-Package IronPdf
Install-Package IronPdf
Można również wyszukać IronPdf w interfejsie graficznym menedżera pakietów NuGet lub dodać go z poziomu CLI .NET za pomocą dotnet add package IronPdf. Nie są wymagane żadne dodatkowe zależności środowiskowe ani pliki konfiguracyjne — biblioteka zawiera wszystko, co jest potrzebne do renderowania plików PDF w systemach Windows, Linux, macOS, Docker i Kubernetes.

Pakiet jest przeznaczony dla .NET Framework 4.6.2+ oraz wszystkich nowoczesnych wersji .NET, w tym .NET 8, .NET 9 i .NET 10. Po zainstalowaniu pakietu dodaj using IronPdf; na początku pliku, a będziesz gotowy do wygenerowania swojego pierwszego formularza PDF.
Elastyczność wdrażania na wielu platformach ma znaczenie w środowiskach produkcyjnych. IronPDF działa spójnie niezależnie od tego, czy aplikacja jest przeznaczona dla systemu Windows Server, kontenera Linux czy aplikacji Azure Function App — ten sam kod generuje ten sam wynik w każdym środowisku.
Jak działają formularze PDF? Zrozumienie AcroForms
Przed napisaniem kodu warto zrozumieć, co się tworzy. Specyfikacja AcroForm — część standardu PDF od 1998 roku — definiuje interaktywne pola formularzy, które może wyświetlać i wypełniać każda standardowa przeglądarka plików PDF. AcroForms obsługuje pola tekstowe, pola wyboru, przyciski opcji, listy rozwijane, pola listy oraz pola podpisu.
AcroForms to format tworzony i odczytywany przez IronPDF. W przeciwieństwie do formularzy XFA (starszego, zastrzeżonego formatu Adobe), AcroForms działają w programie Adobe Reader, przeglądarkach PDF oraz aplikacjach mobilnych bez problemów z kompatybilnością. Podczas tworzenia formularzy PDF za pomocą IronPDF, wynikiem jest zgodny ze standardami plik AcroForm PDF, który można otworzyć w dowolnej przeglądarce.
Każde pole formularza ma nazwę, typ i wartość. Nazwa jest kluczem używanym podczas programowego odczytu lub zapisu danych. Nazwy pól muszą być unikalne w obrębie dokumentu — jeśli wypełniasz formularz według nazwy, a nazwa pola nie jest dokładnie zgodna, zapis nie ma żadnego efektu, co jest częstym źródłem błędów podczas wypełniania formularzy ze schematu bazy danych.
Typy pól określają, jakie wartości są akceptowane. Pola tekstowe akceptują dowolny ciąg znaków. W polach wyboru można wybrać opcję "Tak" lub "Nie". Pole wyboru przyjmuje wartość ciągu znaków wybranej opcji. Listy rozwijane akceptują wartość ciągu znaków wybranego elementu, która musi być jedną z opcji zdefiniowanych podczas tworzenia pola.
Jak utworzyć formularz PDF z HTML?
Najszybszym sposobem na stworzenie formularza PDF do wypełnienia jest napisanie go w standardowym HTML i przekonwertowanie. Każdy element formularza HTML ma swoje bezpośrednie odpowiedniki w AcroForm: <input type="text"> staje się polem tekstowym, <input type="checkbox"> staje się polem wyboru, <select> staje się listą rozwijaną, a <textarea> staje się wielowierszowym polem tekstowym.
Włącz tworzenie formularzy, ustawiając CreatePdfFormsFromHtml = true w rendererze RenderingOptions. Bez tego znacznika elementy formularza HTML są renderowane jako statyczna zawartość wizualna — można je zobaczyć w pliku PDF, ale nie są to pola interaktywne.
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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
Atrybut name każdego pola wejściowego HTML staje się nazwą pola w pliku PDF. Nazwa ta jest używana później podczas programowego odczytu lub zapisu wartości pól. Wybierz nazwy pasujące do Twojego modelu danych — jeśli zamierzasz wypełnić ten formularz z obiektu bazy danych, nazwij pola zgodnie z właściwościami obiektu.
Wynik

Pola tekstowe i obszary tekstowe są renderowane jako edytowalne pola tekstowe. Przyciski opcji z pasującymi atrybutami name są zgrupowane, więc można wybrać tylko jeden. Pola wyboru są renderowane jako pola przełączalne. Powstały plik PDF otwiera się w dowolnej standardowej przeglądarce, a wszystkie pola formularza są gotowe do wypełnienia.
To podejście oparte na HTML sprawdza się dobrze, gdy projekty formularzy istnieją już jako strony internetowe, gdy zespół woli utrzymywać formularze w kodzie znacznikowym lub gdy trzeba wygenerować formularze, które dokładnie pasują do istniejących szablonów HTML aplikacji. Renderer obsługuje wszystkie szczegóły specyfikacji PDF.

Jak programowo dodać pola formularza do pliku PDF?
Gdy wymagana jest precyzyjna kontrola współrzędnych lub gdy dodajesz pola formularza do istniejącego dokumentu PDF, programowe API pól formularza zapewnia bezpośrednią kontrolę nad położeniem, rozmiarem i wartością domyślną każdego pola.
Tworzenie obiektów pola z jawnymi współrzędnymi strony. Pochodzenie (0, 0) znajduje się w lewym dolnym rogu strony, gdzie x rośnie w prawo, a y w górę — jest to ten sam układ współrzędnych, który jest używany w całej specyfikacji 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");
Imports IronPdf
Imports IronSoftware.Forms
' Generate a base PDF document to add fields to
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Application Form</h1><p>Please complete all fields below.</p>")
' Text field: name, default value, page index, x, y, width, height
Dim nameField As New TextFormField("applicantName", "", 0, 50, 700, 200, 20)
pdf.Form.Add(nameField)
' Checkbox field with default unchecked state
Dim termsCheckbox As New CheckboxFormField("agreeTerms", "no", 0, 50, 650, 15, 15)
pdf.Form.Add(termsCheckbox)
' Dropdown with a defined list of options
Dim departmentCombo As New ComboboxFormField("department", "", 0, 50, 600, 150, 20, New List(Of String) From {"Engineering", "Marketing", "Sales", "Support"})
pdf.Form.Add(departmentCombo)
' Save the output document
pdf.SaveAs("application-with-fields.pdf")
TextFormField tworzy pole tekstowe do wprowadzania danych w jednym wierszu. CheckboxFormField umieszcza przełączalne pole wyboru. ComboboxFormField tworzy listę rozwijaną ograniczoną do podanej listy opcji. Każda klasa udostępnia dodatkowe właściwości do ustawiania kolejności tabulatorów, tekstu podpowiedzi, stanu tylko do odczytu oraz flag pól wymaganych.
Oba podejścia – konwersja HTML i programowe tworzenie pól – można łączyć. Wygeneruj podstawowy układ z kodu HTML w celu efektywnego zarządzania szablonami, a następnie dodaj specjalistyczne pola z precyzyjnym pozycjonowaniem za pomocą API. Przewodnik dotyczący wypełniania i edycji formularzy obejmuje pełen zakres dostępnych typów pól.

Jak wypełnić istniejący formularz PDF?
Wiele procesów rozpoczyna się od istniejącego formularza PDF — szablonu rządowego, umowy z dostawcą lub standardowego wniosku, który Twoja organizacja otrzymuje od partnerów. Wypełnianie tych formularzy programowo pozwala zautomatyzować generowanie dokumentów bez konieczności odtwarzania oryginalnego projektu.
Załaduj istniejący plik PDF za pomocą PdfDocument.FromFile, zlokalizuj każde pole według nazwy za pomocą FindFormField i przypisz wartość do właściwości Value pola.
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");
Imports IronPdf
' Load the existing PDF containing AcroForm fields
Dim pdf As PdfDocument = PdfDocument.FromFile("existing-application.pdf")
' Fill text fields by exact field name
Dim nameField = pdf.Form.FindFormField("applicantName")
nameField.Value = "Sarah Johnson"
Dim emailField = pdf.Form.FindFormField("email")
emailField.Value = "sarah.johnson@example.com"
' Set checkbox and radio button values
Dim termsField = pdf.Form.FindFormField("agreeTerms")
termsField.Value = "Yes"
Dim accountTypeField = pdf.Form.FindFormField("accountType")
accountTypeField.Value = "business"
' Set dropdown selection to one of its defined options
Dim departmentField = pdf.Form.FindFormField("department")
departmentField.Value = "Engineering"
' Save the completed form
pdf.SaveAs("completed-application.pdf")
FindFormField lokalizuje pola na podstawie nazwy nadanej podczas tworzenia formularza. Dopasowanie nazw pól uwzględnia wielkość liter i jest dokładne — "applicantName" i "ApplicantName" to różne pola. Jeśli wypełniasz formularz innej firmy i nie masz pewności co do nazw pól, przejdź przez pdf.Form, aby PRINTować nazwę każdego pola przed próbą wypełnienia według nazwy.
Dane wejściowe

Wynik

Różne typy pól wymagają odpowiednich formatów wartości. Pola tekstowe akceptują dowolny ciąg znaków. W polach wyboru można wybrać opcję "Tak" lub "Nie". Pole wyboru akceptuje wartość ciągu znaków odpowiadającą wybranej opcji. Listy rozwijane akceptują wartość ciągu znaków jednej z zdefiniowanych opcji — ustawienie wartości, która nie znajduje się na liście opcji, nie ma żadnego efektu.
Podczas przetwarzania formularzy z wieloma polami należy iterować bezpośrednio nad pdf.Form zamiast wielokrotnie wywoływać FindFormField. Iteracja jest bardziej wydajna w przypadku operacji zbiorczych i pozwala uniknąć powtarzających się liniowych przeszukiwań zbioru pól.
Jak odczytywać i wyodrębniać dane z pól formularzy?
Pobieranie danych z formularzy z przesłanych plików PDF to operacja odwrotna: wczytanie wypełnionego formularza, a następnie odczytanie nazwy i aktualnej wartości każdego pola w celu dalszego przetwarzania. Ten wzorzec obsługuje zautomatyzowane procesy przyjmowania danych, w których użytkownicy wypełniają formularz PDF, przesyłają go, a aplikacja przetwarza dane bez ręcznego wprowadzania danych.
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})");
Imports IronPdf
' Load the completed, submitted PDF form
Dim pdf As PdfDocument = PdfDocument.FromFile("submitted-form.pdf")
' Iterate all fields to extract names, values, and types
Console.WriteLine("Form Data Extraction:")
Console.WriteLine("----------------------")
For Each field In pdf.Form
Console.WriteLine($"Field: {field.Name}")
Console.WriteLine($"Value: {field.Value}")
Console.WriteLine($"Type: {field.GetType().Name}")
Console.WriteLine()
Next
' Or retrieve specific fields for targeted processing
Dim customerName As String = If(pdf.Form.FindFormField("applicantName")?.Value, "Not provided")
Dim customerEmail As String = If(pdf.Form.FindFormField("email")?.Value, "Not provided")
Console.WriteLine($"Customer: {customerName} ({customerEmail})")
Właściwość Form udostępnia kolekcję wszystkich pól w dokumencie, którą można wyliczyć. Każdy obiekt pola zawiera informacje o Name, aktualnym Value oraz typie. Ogólne procesory formularzy wykorzystują ten wzorzec do obsługi dowolnej struktury formularza PDF bez sztywno zakodowanych nazw pól.
Wynik

Operator warunkowy null ?. w FindFormField obsługuje przypadki, w których brakuje oczekiwanego pola — jest to przydatne podczas przetwarzania formularzy z wielu źródeł, które mogą mieć nieco odmienne struktury pól. Zawsze należy podawać wartość rezerwową lub sprawdzać, czy pole nie jest puste, zamiast zakładać, że pole istnieje.
Wyodrębnione dane integrują się bezpośrednio z Entity Framework lub ADO.NET w celu zapisu do bazy danych, serializacji JSON dla odpowiedzi API oraz generowania plików CSV na potrzeby raportowania. Połącz IronPDF z IronOCR, jeśli potrzebujesz również wyodrębnić dane ze skanowanych lub opartych na obrazach formularzy, w których pola nie zostały wypełnione cyfrowo.
Jak generować spersonalizowane formularze na dużą skalę?
Najczęściej spotykanym zastosowaniem automatyzacji formularzy PDF jest generowanie partii — tworzenie setek lub tysięcy formularzy wstępnie wypełnionych danymi z bazy danych, API lub pliku CSV. Prosta pętla radzi sobie z tym bez żadnej dodatkowej infrastruktury.
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");
}
Imports IronPdf
' Retrieve customer records from your data source
Dim customers = GetCustomersFromDatabase()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.CreatePdfFormsFromHtml = True
For Each customer In customers
' Build an HTML template with static data pre-filled and interactive fields for user input
Dim formHtml As String = $"
<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>"
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(formHtml)
pdf.SaveAs($"review-form-{customer.AccountNumber}.pdf")
Next
Szablon HTML bezpośrednio osadza statyczne dane klienta, dzięki czemu odbiorca widzi swoje imię i nazwisko oraz numer konta, a także zawiera interaktywne pola na dane, które musi podać. Przetwarzanie setek rekordów w trybie wsadowym zajmuje kilka sekund, a nie kilka godzin, jak w przypadku ręcznego przygotowania.
Struktura pętli działa z dowolnym źródłem danych: zapytaniami Entity Framework, odpowiedziami API lub importami CSV. Każda iteracja generuje kompletny, gotowy do dystrybucji plik PDF dostosowany do danego rekordu. W scenariuszach wymagających dużej przepustowości należy użyć await wraz z Task.WhenAll do równoległego renderowania formularzy — metoda RenderHtmlAsPdfAsync biblioteki IronPDF obsługuje w pełni asynchroniczne renderowanie.
Po wygenerowaniu partii formularzy są one zazwyczaj pakowane do archiwum ZIP w celu dystrybucji za pomocą IronZIP, wysyłane za pośrednictwem integracji poczty elektronicznej, przesyłane do pamięci w chmurze lub kierowane do platformy podpisów elektronicznych w celu sfinalizowania umowy.
Jak spłaszczyć lub zablokować formularze PDF po wypełnieniu?
Po pełnym wypełnieniu i zatwierdzeniu formularza często trzeba go zablokować, aby wartości nie mogły być już edytowane. Spłaszczenie przekształca wszystkie interaktywne pola formularza w statyczną, nieedytowalną treść wizualną, zachowując jednocześnie dokładny wygląd wypełnionego formularza.
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");
Imports IronPdf
' Load a completed, signed form
Dim pdf As PdfDocument = 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")
Spłaszczanie jest właściwym podejściem do archiwizacji wypełnionych formularzy, generowania dokumentów zgodnych ze standardem PDF/A do długoterminowego przechowywania oraz tworzenia ostatecznych kopii do dystrybucji. Po spłaszczeniu dane formularza są nadal widoczne, ale nie można ich modyfikować. Przewodnik dotyczący spłaszczania plików PDF obejmuje dodatkowe opcje spłaszczania, w tym selektywne spłaszczanie pól.
W sytuacjach wymagających prawnie wiążącego potwierdzenia, IronPDF obsługuje również podpisy cyfrowe, które kryptograficznie wiążą tożsamość podpisującego z dokumentem. Podpisy cyfrowe i spłaszczanie formularzy służą różnym celom — podpisy potwierdzają autentyczność, a spłaszczanie zapobiega modyfikacjom.
Jakie są Twoje kolejne kroki?
Formularze PDF w .NET obejmują cztery podstawowe operacje: tworzenie formularzy z HTML lub za pośrednictwem API, wypełnianie istniejących formularzy danymi ze źródeł, wyodrębnianie przesłanych danych oraz generowanie spersonalizowanych kopii na dużą skalę. IronPDF obsługuje wszystkie cztery za pomocą spójnego interfejsu API, przy czym ten sam kod działa w systemach Windows, Linux, macOS oraz w kontenerach.
Poradnik "Tworzenie formularzy PDF" obejmuje wszystkie dostępne typy pól wraz z przykładami kodu. Przewodnik "Wypełnianie i edycja formularzy" zawiera bardziej szczegółowe informacje na temat zbiorczej aktualizacji pól, grup przycisków opcji oraz obsługi pól listy. Centrum dokumentacji IronPDF zawiera kompletną dokumentację API oraz zaawansowane tematy, w tym formularze wielostronicowe, walidację pól formularzy oraz optymalizację wydajności dla potoków o dużej przepustowości.
Rozpocznij bezpłatny okres próbny, aby poznać możliwości formularzy PDF w swoim projekcie, lub zapoznaj się z opcjami licencyjnymi na potrzeby wdrożenia produkcyjnego.

Często Zadawane Pytania
Jakiego standardu formularzy PDF używa IronPDF?
IronPDF tworzy i odczytuje AcroForms — standard interaktywnych formularzy zdefiniowany w specyfikacji PDF od 1998 roku. AcroForms są obsługiwane przez program Adobe Reader, przeglądarki plików PDF oraz aplikacje mobilne, w przeciwieństwie do starszego formatu XFA, który ma ograniczoną kompatybilność.
Jak włączyć tworzenie pól formularzy z kodu HTML w IronPDF?
Przed wywołaniem `RenderHtmlAsPdf` należy ustawić `renderer.RenderingOptions.CreatePdfFormsFromHtml = true`. Bez tej flagi elementy formularza HTML są renderowane jako statyczna zawartość wizualna, a nie jako interaktywne pola AcroForm.
Jak wypełnić konkretne pole w istniejącym formularzu PDF?
Załaduj plik PDF za pomocą `PdfDocument.FromFile`, wywołaj `pdf.Form.FindFormField("fieldName")`, aby pobrać obiekt pola, a następnie przypisz ciąg znaków do jego właściwości `Value`. Dopasowanie nazwy pola uwzględnia wielkość liter. Zapisz wynik za pomocą `pdf.SaveAs`.
Jak wyodrębnić wszystkie wartości pól formularza z przesłanego pliku PDF?
Przejrzyj obiekt `pdf.Form` za pomocą `foreach (var field in pdf.Form)` i odczytaj właściwości `Name` oraz `Value` każdego pola. Aby uzyskać ukierunkowane wyodrębnianie, użyj `pdf.Form.FindFormField("name")?.Value` wraz z operatorem warunkowym null, aby bezpiecznie obsłużyć brakujące pola.
Czy IronPDF może generować setki formularzy z bazy danych w pętli?
Tak. Utwórz obiekt `ChromePdfRenderer` z parametrem `CreatePdfFormsFromHtml = true`, przejdź przez rekordy danych, zbuduj ciąg HTML dla każdego rekordu, wywołaj metodę `RenderHtmlAsPdf` i zapisz każdy wynik. Aby uzyskać wysoką przepustowość, użyj metody `RenderHtmlAsPdfAsync` z `Task.WhenAll` do renderowania równoległego.
Czym jest spłaszczanie formularza PDF?
Spłaszczenie przekształca wszystkie interaktywne pola formularza w statyczną, nieedytowalną treść wizualną, zachowując jednocześnie dokładny wygląd wypełnionego formularza. Wywołaj `pdf.Form.Flatten()`, a następnie zapisz. Wynik nadaje się do archiwizacji, zapewnienia zgodności z PDF/A oraz dystrybucji, gdzie należy uniemożliwić edycję pól.
Czy IronPDF działa w systemie Linux i w kontenerach Docker?
Tak. IronPDF działa na systemach Windows, Linux, macOS, Docker i Kubernetes. Ten sam kod C# generuje ten sam plik PDF na wszystkich platformach. Informacje na temat konfiguracji dla poszczególnych platform można znaleźć w przewodnikach dotyczących IronPDF dla systemów Linux i Docker w dokumentacji.
Jakie platformy i wersje .NET obsługuje IronPDF w przypadku formularzy PDF?
IronPDF obsługuje .NET Framework 4.6.2 i nowsze oraz wszystkie nowoczesne wersje .NET, w tym .NET 6, .NET 7, .NET 8, .NET 9 i .NET 10. Obsługuje również aplikacje ASP.NET, ASP.NET Core, Blazor Server, Azure Functions i MAUI.




