フッターコンテンツにスキップ
IRONPDFの使用

C#でPDFフォームフィールドをプログラムで読み取る方法

PDFフォームを扱うことは、開発者にとって非常に困難なことがあります。 求人の応募処理、アンケートの回答、保険請求の処理に関わらず、手動でフォームデータをコピーするのは非常に時間がかかり、間違いが生じやすいものです。 IronPDFを使用すると、そのような面倒な作業を省略し、コードを数行書くだけでPDFドキュメント内のインタラクティブフォームフィールドから値を取得できます。 以前は時間がかかっていた作業を数秒でできます。

この記事では、C#のフォームオブジェクトを使用して簡単なフォームのすべてのフィールドを取得する方法を紹介します。 サンプルコードでは、各フィールドをループしてその値を抽出する方法を示しています。 それは簡単で、複雑なPDFビューアと戦ったり隠れた書式の問題に対処する必要はありません。

IronPDFを始めよう

PDFフォームフィールド抽出のためのIronPDFのセットアップには最小限の構成が必要です。 NuGetパッケージマネージャーを使用してライブラリをインストールしてください:

Install-Package IronPdf

またはVisual StudioのパッケージマネージャーUIを通して。 IronPDFはWindows、Linux、macOS、およびDockerコンテナをサポートし、さまざまな展開シナリオに柔軟に対応します。 IronPDFのドキュメントを参照して、詳細なセットアップ手順をご覧ください。

IronPDFでPDFフォームデータを読み取る

次のコードは、IronPDFを使用して既存の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

このコードは、簡単なフォームを含むPDFファイルをロードし、各フォームフィールドを反復処理し、フィールド名、フィールド値、およびフィールドタイプを出力します。 PdfDocument.FromFile()メソッドはPDFドキュメントを解析し、Formプロパティはすべてのインタラクティブフォームフィールドにアクセスを提供します。 各フィールドは、そのフィールドタイプに特有の他のプロパティを公開しており、正確なデータ抽出を可能にしています。 より複雑なシナリオについては、高度なフォーム操作メソッドのためにIronPDF APIリファレンスを探索してください。

異なるフォームフィールドタイプの読み取り

PDFフォームにはさまざまなフィールドタイプがあり、それぞれに特定の取り扱いが必要です。 IronPDFはフィールドタイプを自動的に識別し、特定のアクセスを提供します。

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

FindFormField()メソッドを使用すると、指定されたフィールド名に直接アクセスでき、すべてのフォームフィールドを反復処理する必要がなくなります。 チェックボックスはチェックされた場合"Yes"を返し、ラジオボタンは選択された値を返します。 ドロップダウンやリストボックスなどのチョイスフィールドは、フィールド値とともにChoicesプロパティを通じてすべての利用可能なオプションを提供します。 この包括的なメソッドのセットにより、開発者は複雑なインタラクティブフォームからデータへのアクセスと抽出が可能になります。 複雑なフォームを扱う際には、プログラム的に抽出する前にフィールド値を入力または変更するためにIronPDFのフォーム編集機能の使用を検討してください。

ここで、IronPDFがより複雑なフォームを取り扱ってフォームフィールドの値からデータを抽出することができる様子をご覧ください:

C# プログラムで PDF フォーム フィールドを読み取る方法: 図 2 - 複雑なフォームの読み取り出力

実世界の例:アンケートフォームの処理

顧客調査から数百のPDFフォームを処理する必要があるシナリオを考えてみましょう。 以下のコードは、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

この方法は、指定されたフォルダー内のPDFファイルのすべてのPDFインタラクティブフォームフィールドを処理し、アンケートの回答を抽出し、それらをCSVファイルにコンパイルします。null合併演算子(??)は、フィールドが存在しない場合に空文字列を提供し、例外を防ぎます。 フィードバックテキストは、引用符をエスケープし改行を削除してCSV形式で適切に処理されます。 エラー処理により、破損したファイルが処理全体を停止させないようにします。

C# プログラムで PDF フォームフィールドを読み取る方法: 図 3 - アンケートフォームデータ抽出用の CSV ファイル出力

一般的な課題の対応

PDFフォームを扱う際に注意すべき点:

  • パスワードで保護されたPDFファイル:PdfDocument.FromFile("secured.pdf", "password")。
  • PDFフォームフィールドの名称が欠落している、あるいは同一である場合:nullチェックを使用してpdf.Formコレクションを確認してください。
  • 平坦化されたフォーム:時折、PDFフォームデータがPDFビューアでレンダリングされるため、そのような場合にはテキスト抽出メソッドを使用する必要があるかもしれません。

IronPDFを使用すると、単純なフォームを作成したり、トグルボタンフィールド、リストボックス、ラジオボタン、チェックボックスにアクセスしたり、インタラクティブフォームフィールドをプログラムで操作したりすることができます。 包括的なエラー処理戦略については、Microsoftの例外処理に関するドキュメントを参照してください。

結論

IronPDFはC#でPDFフォームフィールドを読み取るのを簡略化し、チェックボックス、ラジオボタン、リストボックス、トグルボタンフィールド、テキストフィールドなど、さまざまなフィールドタイプに直感的にアクセスできます。 上のstatic void Mainスニペットのようなサンプルコードを使用することで、開発者はPDFフォームから効率的にデータを抽出し、Visual Studioプロジェクトに統合し、Adobe Readerに依存せずにドキュメントワークフローを自動化できます。

手動でのデータ入力をワークフローから排除する準備はできていますか? 無料トライアルを始めて、あなたのニーズに合わせてスケールしてください。

よくある質問

C#を使用してPDFフォームフィールドからデータを抽出するにはどうすればよいですか?

C#でPDFフォームフィールドからデータを抽出するには、IronPDFを使用できます。記入可能PDFから簡単なコード例でテキスト、チェックボックス、ドロップダウンを読み取ることができます。

IronPDFはどのような種類のフォームフィールドに対応できますか?

IronPDFは、テキストフィールド、チェックボックス、ラジオボタン、ドロップダウンなど、さまざまな種類のフォームフィールドに対応でき、記入可能PDFからのデータ抽出において多用途です。

開発者はなぜPDFフォームの処理にIronPDFを使用すべきでしょうか?

開発者はIronPDFを使用することで、フォームデータの抽出にかかる時間と労力を大幅に削減し、手動のミスを最小限に抑えて効率を向上させることができます。

IronPDFは大量のPDFフォーム処理に対応していますか?

はい、IronPDFは大量のPDFフォーム処理に適しています。インタラクティブなフォームフィールドからフィールド値を素早く抽出し、時間を節約し、エラーの可能性を減らします。

IronPDF を使用するためのコード例はありますか?

はい、IronPDFは開発者が簡単にC#プロジェクトにPDFフォームフィールド抽出を統合できるように、簡単なコード例を提供します。

IronPDFをアンケートの回答処理に使用できますか?

はい、IronPDFはアンケートの回答処理に理想的です。インタラクティブなPDFドキュメントのさまざまなフォームフィールドから効率的にデータを読み取り、抽出できます。

PDFフォームデータ抽出にIronPDFを使用する利点は何ですか?

PDFフォームデータ抽出にIronPDFを使用する利点は、このプロセスを自動化することで、手動データ入力と比較して迅速でエラーの少ないものにすることです。

PDFフォームの取り扱いにおいてIronPDFはどのように改善しますか?

IronPDFはプログラムでフォームフィールドデータを抽出することで、PDFフォームの取り扱いを改善し、手動の方法と比較して必要な時間と労力を削減します。

IronPDFはインタラクティブなPDFフォームフィールドをサポートしていますか?

はい、IronPDFはインタラクティブなPDFフォームフィールドを完全にサポートしており、開発者がアプリケーション内でフォームデータを簡単に抽出し、操作することができます。

IronPDF は PDF フォーム フィールドを読み取るときに .NET 10 と互換性がありますか?

はい。IronPDFは、フォームフィールドの読み取り、書き込み、フラット化など、.NET 10と完全に互換性があります。.NET 10プロジェクトでIronPDFを使用する場合、特別な回避策は不要です。`PdfDocument.FromFile(...)`を使用してフォーム付きのPDFを読み込み、`pdf.Form`または`FindFormField(...)`を使用してフィールドにアクセスし、以前のバージョンと同様に値を取得できます。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね