Przejdź do treści stopki
KORZYSTANIE Z IRONPDF

Jak programowo czytać pola formularzy PDF w C#

Praca z formularzami PDF może być prawdziwym utrapieniem dla programistów. Niezależnie od tego, czy przetwarzasz podania o pracę, odpowiedzi z ankiet czy wnioski ubezpieczeniowe, ręczne kopiowanie danych z formularzy zajmuje mnóstwo czasu i jest podatne na błędy. Dzięki IronPDF możesz pominąć całą tę żmudną pracę i pobrać wartości z interaktywnych pól formularza w dokumencie PDF za pomocą zaledwie kilku linii kodu. To, co kiedyś zajmowało godziny, teraz zajmuje sekundy.

W tym artykule pokażę, jak pobrać wszystkie pola z prostego formularza przy użyciu obiektu formularza w języku C#. Przykładowy kod pokazuje, jak bez większego wysiłku przejść przez każde pole i wyodrębnić jego wartość. To proste, nie będziesz musiał zmagać się z trudnymi w obsłudze przeglądarkami PDF ani radzić sobie z ukrytymi problemami z formatowaniem.

Pierwsze kroki z IronPDF

Konfiguracja IronPDF do wyodrębniania pól formularzy PDF wymaga minimalnych ustawień. Zainstaluj bibliotekę za pomocą menedżera pakietów NuGet:

Install-Package IronPdf

Lub za pośrednictwem interfejsu użytkownika Menedżera pakietów programu Visual Studio. IronPDF obsługuje systemy Windows, Linux, macOS oraz kontenery Docker, dzięki czemu jest wszechstronnym rozwiązaniem dla różnych scenariuszy wdrożeniowych. Szczegółowe instrukcje konfiguracji można znaleźć w dokumentacji IronPDF.

Odczytywanie danych z formularzy PDF za pomocą IronPDF

Poniższy kod pokazuje, jak można użyć IronPDF do odczytania wszystkich pól z istniejącego pliku PDF:

using IronPdf;
using System;
class Program
{
    static void Main(string[] args)
    {
        // Load the PDF document containing interactive form fields
        PdfDocument pdf = PdfDocument.FromFile("application_form.pdf");
        // Access the form object and iterate through all fields
        var form = pdf.Form;
        foreach (var field in form)
        {
            Console.WriteLine($"Field Name: {field.Name}");
            Console.WriteLine($"Field Value: {field.Value}");
            Console.WriteLine($"Field Type: {field.GetType().Name}");
            Console.WriteLine("---");
        }
    }
}
using IronPdf;
using System;
class Program
{
    static void Main(string[] args)
    {
        // Load the PDF document containing interactive form fields
        PdfDocument pdf = PdfDocument.FromFile("application_form.pdf");
        // Access the form object and iterate through all fields
        var form = pdf.Form;
        foreach (var field in form)
        {
            Console.WriteLine($"Field Name: {field.Name}");
            Console.WriteLine($"Field Value: {field.Value}");
            Console.WriteLine($"Field Type: {field.GetType().Name}");
            Console.WriteLine("---");
        }
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main(args As String())
        ' Load the PDF document containing interactive form fields
        Dim pdf As PdfDocument = PdfDocument.FromFile("application_form.pdf")
        ' Access the form object and iterate through all fields
        Dim form = pdf.Form
        For Each field In form
            Console.WriteLine($"Field Name: {field.Name}")
            Console.WriteLine($"Field Value: {field.Value}")
            Console.WriteLine($"Field Type: {field.GetType().Name}")
            Console.WriteLine("---")
        Next
    End Sub
End Class
$vbLabelText   $csharpLabel

Ten kod ładuje plik PDF zawierający prosty formularz, przechodzi przez każde pole formularza i drukuje nazwę pola, wartość pola oraz typ pola. Metoda PdfDocument.FromFile() analizuje dokument PDF, natomiast właściwość Form zapewnia dostęp do wszystkich interaktywnych pól formularza. Każde pole udostępnia inne właściwości specyficzne dla swojego typu, umożliwiając precyzyjne pozyskiwanie danych. W przypadku bardziej złożonych scenariuszy zapoznaj się z Dokumentacją API IronPDF, aby poznać zaawansowane metody manipulacji formularzami.

Odczytywanie różnych typów pól formularzy

Formularze PDF zawierają różne typy pól, z których każdy wymaga specyficznego traktowania. IronPDF automatycznie rozpoznaje typy pól i zapewnia dostosowany dostęp:

using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("complex_form.pdf");
// Text fields - standard input boxes
var nameField = pdf.Form.FindFormField("fullName");
string userName = nameField.Value;
// Checkboxes - binary selections
var agreeCheckbox = pdf.Form.FindFormField("termsAccepted.");
bool isChecked = agreeCheckbox.Value == "Yes";
// Radio buttons - single choice from group
var genderRadio = pdf.Form.FindFormField("gender");
string selectedGender = genderRadio.Value;
// Dropdown lists (ComboBox) - predefined options
var countryDropdown = pdf.Form.FindFormField("country");
string selectedCountry = countryDropdown.Value;
// Access all available options
var availableCountries = countryDropdown.Choices;
// Multi-line text areas
var commentsField = pdf.Form.FindFormField("comments_part1_513");
string userComments = commentsField.Value;
// Grab all fields that start with "interests_"
var interestFields = pdf.Form
    .Where(f => f.Name.StartsWith("interests_"));
// Collect checked interests
List<string> selectedInterests = new List<string>();
foreach (var field in interestFields)
{
    if (field.Value == "Yes")  // checkboxes are "Yes" if checked
    {
        // Extract the interest name from the field name
        string interestName = field.Name.Replace("interests_", "");
        selectedInterests.Add(interestName);
    }
}
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("complex_form.pdf");
// Text fields - standard input boxes
var nameField = pdf.Form.FindFormField("fullName");
string userName = nameField.Value;
// Checkboxes - binary selections
var agreeCheckbox = pdf.Form.FindFormField("termsAccepted.");
bool isChecked = agreeCheckbox.Value == "Yes";
// Radio buttons - single choice from group
var genderRadio = pdf.Form.FindFormField("gender");
string selectedGender = genderRadio.Value;
// Dropdown lists (ComboBox) - predefined options
var countryDropdown = pdf.Form.FindFormField("country");
string selectedCountry = countryDropdown.Value;
// Access all available options
var availableCountries = countryDropdown.Choices;
// Multi-line text areas
var commentsField = pdf.Form.FindFormField("comments_part1_513");
string userComments = commentsField.Value;
// Grab all fields that start with "interests_"
var interestFields = pdf.Form
    .Where(f => f.Name.StartsWith("interests_"));
// Collect checked interests
List<string> selectedInterests = new List<string>();
foreach (var field in interestFields)
{
    if (field.Value == "Yes")  // checkboxes are "Yes" if checked
    {
        // Extract the interest name from the field name
        string interestName = field.Name.Replace("interests_", "");
        selectedInterests.Add(interestName);
    }
}
Imports IronPdf

Dim pdf As PdfDocument = PdfDocument.FromFile("complex_form.pdf")

' Text fields - standard input boxes
Dim nameField = pdf.Form.FindFormField("fullName")
Dim userName As String = nameField.Value

' Checkboxes - binary selections
Dim agreeCheckbox = pdf.Form.FindFormField("termsAccepted.")
Dim isChecked As Boolean = agreeCheckbox.Value = "Yes"

' Radio buttons - single choice from group
Dim genderRadio = pdf.Form.FindFormField("gender")
Dim selectedGender As String = genderRadio.Value

' Dropdown lists (ComboBox) - predefined options
Dim countryDropdown = pdf.Form.FindFormField("country")
Dim selectedCountry As String = countryDropdown.Value

' Access all available options
Dim availableCountries = countryDropdown.Choices

' Multi-line text areas
Dim commentsField = pdf.Form.FindFormField("comments_part1_513")
Dim userComments As String = commentsField.Value

' Grab all fields that start with "interests_"
Dim interestFields = pdf.Form.Where(Function(f) f.Name.StartsWith("interests_"))

' Collect checked interests
Dim selectedInterests As New List(Of String)()
For Each field In interestFields
    If field.Value = "Yes" Then ' checkboxes are "Yes" if checked
        ' Extract the interest name from the field name
        Dim interestName As String = field.Name.Replace("interests_", "")
        selectedInterests.Add(interestName)
    End If
Next
$vbLabelText   $csharpLabel

Metoda FindFormField() umożliwia bezpośredni dostęp do konkretnego pola na podstawie nazwy, eliminując konieczność iteracji przez wszystkie pola formularza. Pola wyboru zwracają wartość "Tak", jeśli są zaznaczone, natomiast przyciski opcji zwracają wybraną wartość. Pola wyboru, takie jak listy rozwijane i pola listy, udostępniają zarówno wartość pola, jak i wszystkie dostępne opcje za pośrednictwem właściwości Choices. Ten kompleksowy zestaw metod pozwala programistom na dostęp do danych i ich pobieranie ze złożonych formularzy interaktywnych. W przypadku pracy ze złożonymi formularzami warto rozważyć wykorzystanie funkcji edycji formularzy IronPDF do wypełnienia lub modyfikacji wartości pól przed programowym wyodrębnieniem danych.

Tutaj możesz zobaczyć, jak IronPDF może przetwarzać bardziej złożone formularze i wyodrębniać dane z wartości pól formularza:

Jak programowo odczytywać pola formularzy PDF w języku C#: Rysunek 2 – Złożony wynik odczytu formularza

Przykład z życia: Przetwarzanie formularzy ankietowych

Rozważmy scenariusz, w którym trzeba przetworzyć setki formularzy PDF z ankiet klientów. Poniższy kod ilustruje przetwarzanie wsadowe przy użyciu IronPDF:

using IronPdf;
using System;
using System.Text;
using System.IO;
using System.Collections.Generic;
public class SurveyProcessor
{
    static void Main(string[] args)
    {
        ProcessSurveyBatch(@"C:\Surveys");
    }
    public static void ProcessSurveyBatch(string folderPath)
    {
        StringBuilder csvData = new StringBuilder();
        csvData.AppendLine("Date,Name,Email,Rating,Feedback");
        foreach (string pdfFile in Directory.GetFiles(folderPath, "*.pdf"))
        {
            try
            {
                PdfDocument survey = PdfDocument.FromFile(pdfFile);
                string date = survey.Form.FindFormField("surveyDate")?.Value ?? "";
                string name = survey.Form.FindFormField("customerName")?.Value ?? "";
                string email = survey.Form.FindFormField("email")?.Value ?? "";
                string rating = survey.Form.FindFormField("satisfaction")?.Value ?? "";
                string feedback = survey.Form.FindFormField("comments")?.Value ?? "";
                feedback = feedback.Replace("\n", " ").Replace("\"", "\"\"");
                csvData.AppendLine($"{date},{name},{email},{rating},\"{feedback}\"");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error processing {pdfFile}: {ex.Message}");
            }
        }
        File.WriteAllText("survey_results.csv", csvData.ToString());
        Console.WriteLine("Survey processing complete!");
    }
}
using IronPdf;
using System;
using System.Text;
using System.IO;
using System.Collections.Generic;
public class SurveyProcessor
{
    static void Main(string[] args)
    {
        ProcessSurveyBatch(@"C:\Surveys");
    }
    public static void ProcessSurveyBatch(string folderPath)
    {
        StringBuilder csvData = new StringBuilder();
        csvData.AppendLine("Date,Name,Email,Rating,Feedback");
        foreach (string pdfFile in Directory.GetFiles(folderPath, "*.pdf"))
        {
            try
            {
                PdfDocument survey = PdfDocument.FromFile(pdfFile);
                string date = survey.Form.FindFormField("surveyDate")?.Value ?? "";
                string name = survey.Form.FindFormField("customerName")?.Value ?? "";
                string email = survey.Form.FindFormField("email")?.Value ?? "";
                string rating = survey.Form.FindFormField("satisfaction")?.Value ?? "";
                string feedback = survey.Form.FindFormField("comments")?.Value ?? "";
                feedback = feedback.Replace("\n", " ").Replace("\"", "\"\"");
                csvData.AppendLine($"{date},{name},{email},{rating},\"{feedback}\"");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error processing {pdfFile}: {ex.Message}");
            }
        }
        File.WriteAllText("survey_results.csv", csvData.ToString());
        Console.WriteLine("Survey processing complete!");
    }
}
Imports IronPdf
Imports System
Imports System.Text
Imports System.IO
Imports System.Collections.Generic

Public Class SurveyProcessor
    Shared Sub Main(args As String())
        ProcessSurveyBatch("C:\Surveys")
    End Sub

    Public Shared Sub ProcessSurveyBatch(folderPath As String)
        Dim csvData As New StringBuilder()
        csvData.AppendLine("Date,Name,Email,Rating,Feedback")

        For Each pdfFile As String In Directory.GetFiles(folderPath, "*.pdf")
            Try
                Dim survey As PdfDocument = PdfDocument.FromFile(pdfFile)
                Dim [date] As String = If(survey.Form.FindFormField("surveyDate")?.Value, "")
                Dim name As String = If(survey.Form.FindFormField("customerName")?.Value, "")
                Dim email As String = If(survey.Form.FindFormField("email")?.Value, "")
                Dim rating As String = If(survey.Form.FindFormField("satisfaction")?.Value, "")
                Dim feedback As String = If(survey.Form.FindFormField("comments")?.Value, "")
                feedback = feedback.Replace(vbLf, " ").Replace("""", """""")
                csvData.AppendLine($"{[date]},{name},{email},{rating},""{feedback}""")
            Catch ex As Exception
                Console.WriteLine($"Error processing {pdfFile}: {ex.Message}")
            End Try
        Next

        File.WriteAllText("survey_results.csv", csvData.ToString())
        Console.WriteLine("Survey processing complete!")
    End Sub
End Class
$vbLabelText   $csharpLabel

Ta metoda przetwarza wszystkie interaktywne pola formularzy w plikach PDF znajdujących się w określonym folderze, wyodrębnia odpowiedzi z ankiet i kompiluje je do pliku CSV. Operator scalania wartości null (??) zapewnia puste ciągi znaków dla brakujących pól, zapobiegając wyjątkom. Tekst opinii został oczyszczony do formatu CSV poprzez zamianę znaków cudzysłowu i usunięcie znaków końca linii. Obsługa błędów gwarantuje, że jeden uszkodzony plik nie zatrzyma całego procesu przetwarzania partii.

Jak programowo odczytywać pola formularzy PDF w języku C#: Rysunek 3 – Plik CSV z danymi wyodrębnionymi z formularza ankietowego

Radzenie sobie z typowymi wyzwaniami

Podczas pracy z formularzami PDF należy pamiętać o:

  • Pliki PDF chronione hasłem: PdfDocument.FromFile("secured.pdf", "password").
  • Brakująca lub ta sama nazwa w polach formularza PDF: sprawdź kolekcję pdf.Form z kontrolą wartości null.
  • Formularze spłaszczone: czasami dane z formularzy PDF są renderowane w przeglądarce PDF; w takich przypadkach zamiast odczytu pól formularza może być konieczne zastosowanie metod ekstrakcji tekstu

Korzystając z IronPDF, można tworzyć proste formularze, uzyskiwać dostęp do pól przycisków przełączających, pól listy, przycisków opcji i pól wyboru, a nawet programowo manipulować interaktywnymi polami formularza. Aby uzyskać informacje na temat kompleksowych strategii obsługi błędów, zapoznaj się z dokumentacją firmy Microsoft dotyczącą obsługi wyjątków.

Wnioski

IronPDF ułatwia odczytywanie pól formularzy PDF w języku C#, zapewniając intuicyjny dostęp do różnych typów pól, od pól wyboru, przycisków opcji, pól listy i pól przełączających po pola tekstowe. Korzystając z przykładowego kodu, takiego jak powyższe fragmenty static void Main, programiści mogą efektywnie wyodrębniać dane z formularzy PDF, integrować je z projektami Visual Studio oraz automatyzować przepływy pracy z dokumentami bez konieczności korzystania z programu Adobe Reader.

Chcesz wyeliminować ręczne wprowadzanie danych ze swojego procesu pracy? Zacznij od bezpłatnej wersji próbnej, którą możesz dostosować do swoich potrzeb.

Często Zadawane Pytania

Jak mogę wyciągnąć dane z pól formularza PDF używając C#?

Możesz użyć IronPDF do wyciągania danych z pól formularza PDF w C#. Pozwala to na czytanie tekstu, pól wyboru, rozwijanych list i nie tylko z wypełnialnych PDF przy użyciu prostych przykładów kodu.

Jakie typy pól formularza może obsłużyć IronPDF?

IronPDF może obsłużyć różne typy pól formularzy, w tym pola tekstowe, pola wyboru, przyciski radiowe, rozwijane listy i inne, co czyni go wszechstronnym do wyciągania danych z wypełnialnych PDF.

Dlaczego deweloperzy powinni używać IronPDF do przetwarzania formularzy PDF?

Deweloperzy powinni używać IronPDF do przetwarzania formularzy PDF, ponieważ znacznie redukuje czas i wysiłek potrzebny do wyciągania danych z formularzy, minimalizując błędy ręczne i poprawiając wydajność.

Czy IronPDF nadaje się do przetwarzania dużych ilości formularzy PDF?

Tak, IronPDF nadaje się do przetwarzania dużych ilości formularzy PDF, ponieważ może szybko wyciągnąć wartości z interaktywnych pól formularzy, oszczędzając czas i zmniejszając potencjalne błędy.

Czy są dostępne przykłady kodu dotyczące korzystania z IronPDF?

Tak, IronPDF zapewnia proste przykłady kodu, aby pomóc deweloperom łatwo zintegrować wyciąganie pola formularza PDF w swoich projektach C#.

Czy można wykorzystać IronPDF do przetwarzania odpowiedzi na ankiety?

Tak, IronPDF jest idealny do przetwarzania odpowiedzi na ankiety, ponieważ efektywnie czyta i wyciąga dane z różnych pól formularzy w interaktywnych dokumentach PDF.

Jaka jest korzyść z używania IronPDF do wyciągania danych formularza PDF?

Korzyścią z używania IronPDF do wyciągania danych formularza PDF jest zautomatyzowanie procesu, co czyni go szybszym i mniej narażonym na błędy w porównaniu do ręcznego wprowadzania danych.

Jak IronPDF poprawia obsługę formularzy PDF?

IronPDF poprawia obsługę formularzy PDF, umożliwiając deweloperom programowe wyciąganie danych z pól formularzy, zmniejszając czas i wysiłek potrzebny w porównaniu do metod ręcznych.

Czy IronPDF obsługuje interaktywne pola formularza PDF?

Tak, IronPDF w pełni obsługuje interaktywne pola formularza PDF, umożliwiając deweloperom łatwe wyciąganie i manipulowanie danymi z formularzy w ich aplikacjach.

Czy IronPDF jest kompatybilny z .NET 10 przy odczytywaniu pól formularza PDF?

Tak — IronPDF jest w pełni kompatybilny z .NET 10, w tym do czytania, zapisywania i spłaszczania pól formularza. Używanie IronPDF w projekcie .NET 10 nie wymaga specjalnych obejść, co czyni go płynnym do załadowania PDF z formularzami przez `PdfDocument.FromFile(...)`, dostępu do pól przez `pdf.Form` lub `FindFormField(...)`, i odczytywania wartości tak jak w poprzednich wersjach.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie