푸터 콘텐츠로 바로가기
IRONPDF 사용하기

C#에서 PDF 파일에서 표 데이터 추출하는 방법

많은 산업에서 PDF 파일은 보고서, 청구서, 데이터 표와 같은 구조화된 문서를 공유하는 데 주로 사용됩니다. 그러나 PDF에서 데이터를 추출하는 것은 특히 표의 경우 PDF 형식의 특성으로 인해 도전적일 수 있습니다. 구조화된 데이터 형식과 달리, PDF는 주로 프레젠테이션을 위해 설계되었고, 데이터 추출을 위한 것이 아닙니다.

그러나 강력한 C# PDF .NET 라이브러리인 IronPDF를 사용하면 PDF에서 표와 같은 구조화된 데이터를 쉽게 추출하고 .NET 응용 프로그램에서 이를 처리할 수 있습니다. 이 기사는 IronPDF를 사용하여 PDF 파일에서 표 데이터를 추출하는 방법을 단계별로 안내할 것입니다.

PDF 문서에서 표를 추출해야 하는 경우는 언제인가요?

표는 데이터 입력, 재고 관리 수행, 강우와 같은 데이터를 기록할 때든 데이터의 구조화 및 표시하는 편리한 방법입니다. 따라서 PDF 문서에서 표와 표 데이터를 추출해야 하는 많은 이유가 있을 수 있습니다. 가장 일반적인 사용 사례는 다음과 같습니다:

  • 데이터 입력 자동화: PDF 보고서나 청구서의 표에서 데이터를 추출하면 데이터베이스나 스프레드시트 채우기 같은 프로세스를 자동화할 수 있습니다.
  • 데이터 분석: 비즈니스는 종종 PDF 형식의 구조화된 보고서를 받습니다. 표를 추출하면 프로그래밍 방식으로 이 데이터를 분석할 수 있습니다.
  • 문서 변환: 표 데이터를 Excel이나 CSV와 같은 더 쉽게 접근할 수 있는 형식으로 추출하면 조작, 저장, 공유가 더 쉬워집니다.
  • 감사 및 준수: 법적 또는 재무 기록을 위해 PDF 문서에서 프로그래밍 방식으로 표 데이터를 추출하면 감사를 자동화하고 준수 여부를 보장할 수 있습니다.

PDF 표는 어떻게 작동하나요?

PDF 파일 형식은 표와 같은 구조화된 형식으로 데이터를 저장할 수 있는 네이티브 기능을 제공하지 않습니다. 오늘 예제에서 사용한 표는 HTML에서 만들어진 후 PDF 형식으로 변환되었습니다. 표는 텍스트와 선으로 렌더링되므로, 표 데이터를 추출하려면 OCR 소프트웨어인 IronOCR를 사용하지 않는 한 콘텐츠를 일부 구문 분석하고 해석해야 합니다.

How to Extract Table Data from a PDF File in C

IronPDF가 이 작업을 처리할 수 있는 방법을 탐색하기 전에 PDF 추출을 처리할 수 있는 온라인 도구를 먼저 탐색해 봅시다. 온라인 PDF 도구를 사용하여 PDF 문서에서 표를 추출하려면 아래에 나열된 단계를 따르세요:

  1. 무료 온라인 PDF 추출 도구로 이동
  2. 표가 포함된 PDF 업로드
  3. 결과 확인 및 다운로드

1단계: 무료 온라인 PDF 추출 도구로 이동

오늘 우리는 온라인 PDF 도구 예제로 Docsumo를 사용할 것입니다. Docsumo는 무료 PDF 표 추출 도구를 제공하는 온라인 PDF 문서 AI입니다.

C#에서 PDF 파일로부터 테이블 데이터를 추출하는 방법: 그림 1

2단계: 표가 포함된 PDF 업로드

이제 "파일 업로드" 버튼을 클릭하여 추출할 PDF 파일을 업로드하세요. 도구는 즉시 PDF 처리를 시작할 것입니다.

C#에서 PDF 파일로부터 테이블 데이터를 추출하는 방법: 그림 2

3단계: 결과 확인 및 다운로드

Docsumo가 PDF 처리를 완료하면 추출된 표를 표시합니다. 그런 다음 행을 추가하거나 제거하는 등 표 구조를 조정할 수 있습니다. 여기서 표를 다른 PDF, XLS, JSON, 텍스트 형식으로 다운로드할 수 있습니다.

C#에서 PDF 파일로부터 테이블 데이터를 추출하는 방법: 그림 3

IronPDF를 사용하여 표 데이터 추출

IronPDF는 PDF에서 데이터, 텍스트 및 그래픽을 추출할 수 있으며, 이를 프로그래밍 방식으로 테이블을 복원하는 데 사용할 수 있습니다. 이를 수행하려면 먼저 PDF의 표에서 텍스트 콘텐츠를 추출한 다음 해당 텍스트를 사용하여 표를 행과 열로 구문 분석해야 합니다. 표를 추출하기 전에 IronPDF의 ExtractAllText() 메서드가 표 안의 데이터를 추출하는 방법을 살펴보겠습니다:

using IronPDF;

class Program
{
    static void Main(string[] args)
    {
        // Load the PDF document
        PdfDocument pdf = PdfDocument.FromFile("example.pdf");

        // Extract all text from the PDF
        string text = pdf.ExtractAllText();

        // Output the extracted text to the console
        Console.WriteLine(text);
    }
}
using IronPDF;

class Program
{
    static void Main(string[] args)
    {
        // Load the PDF document
        PdfDocument pdf = PdfDocument.FromFile("example.pdf");

        // Extract all text from the PDF
        string text = pdf.ExtractAllText();

        // Output the extracted text to the console
        Console.WriteLine(text);
    }
}
Imports IronPDF

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Load the PDF document
		Dim pdf As PdfDocument = PdfDocument.FromFile("example.pdf")

		' Extract all text from the PDF
		Dim text As String = pdf.ExtractAllText()

		' Output the extracted text to the console
		Console.WriteLine(text)
	End Sub
End Class
$vbLabelText   $csharpLabel

C#에서 PDF 파일로부터 테이블 데이터를 추출하는 방법: 그림 4

이 예제에서는 PdfDocument 클래스를 사용하여 PDF 문서를 로드한 다음 ExtractAllText() 메서드를 사용하여 문서 내의 모든 텍스트를 추출한 후 콘솔에 텍스트를 표시했습니다.

IronPDF를 사용하여 텍스트에서 표 데이터 추출하기

PDF에서 텍스트를 추출한 후 표는 일반 텍스트로 행과 열의 시리즈로 나타납니다. 이 텍스트를 줄 바꿈(\n)을 기준으로 분할한 후, 행을 일관된 간격 또는 쉼표나 탭과 같은 구분자를 사용하여 열로 추가로 분할할 수 있습니다. 다음은 텍스트에서 표를 구문 분석하는 기본 예입니다:

using IronPDF;
using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        // Load the PDF document
        PdfDocument pdf = PdfDocument.FromFile("table.pdf");

        // Extract all text from the PDF
        string text = pdf.ExtractAllText();

        // Split the text into lines (rows)
        string[] lines = text.Split('\n');

        foreach (string line in lines)
        {
            // Split the line into columns using the tab character
            string[] columns = line.Split('\t').Where(col => !string.IsNullOrWhiteSpace(col)).ToArray();
            Console.WriteLine("Row:");

            foreach (string column in columns)
            {
                Console.WriteLine("  " + column); // Output each column in the row
            }
        }
    }
}
using IronPDF;
using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        // Load the PDF document
        PdfDocument pdf = PdfDocument.FromFile("table.pdf");

        // Extract all text from the PDF
        string text = pdf.ExtractAllText();

        // Split the text into lines (rows)
        string[] lines = text.Split('\n');

        foreach (string line in lines)
        {
            // Split the line into columns using the tab character
            string[] columns = line.Split('\t').Where(col => !string.IsNullOrWhiteSpace(col)).ToArray();
            Console.WriteLine("Row:");

            foreach (string column in columns)
            {
                Console.WriteLine("  " + column); // Output each column in the row
            }
        }
    }
}
Imports Microsoft.VisualBasic
Imports IronPDF
Imports System
Imports System.Linq

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Load the PDF document
		Dim pdf As PdfDocument = PdfDocument.FromFile("table.pdf")

		' Extract all text from the PDF
		Dim text As String = pdf.ExtractAllText()

		' Split the text into lines (rows)
		Dim lines() As String = text.Split(ControlChars.Lf)

		For Each line As String In lines
			' Split the line into columns using the tab character
			Dim columns() As String = line.Split(ControlChars.Tab).Where(Function(col) Not String.IsNullOrWhiteSpace(col)).ToArray()
			Console.WriteLine("Row:")

			For Each column As String In columns
				Console.WriteLine("  " & column) ' Output each column in the row
			Next column
		Next line
	End Sub
End Class
$vbLabelText   $csharpLabel

C#에서 PDF 파일로부터 테이블 데이터를 추출하는 방법: 그림 5

이 예제에서는 PDF 문서를 로드하고 텍스트를 추출하기 위해 이전과 동일한 단계를 따랐습니다. 그런 다음, text.Split('\n')을 사용하여 줄 바꿈을 기준으로 추출한 텍스트를 행으로 분할하고 lines 배열에 결과를 저장합니다. 이후 foreach 루프를 사용하여 배열의 행을 반복하고 line.Split('\t')를 사용하여 탭 문자 '\t'를 구분자로 행을 열로 추가로 분할합니다. 열 배열의 다음 부분인 Where(col => !string.IsNullOrWhiteSpace(col)).ToArray()는 추가 공간으로 인해 발생할 수 있는 빈 열을 필터링하고 열 배열에 열을 추가합니다.

최종적으로 텍스트를 기본 행과 열 구조로 콘솔 출력 창에 씁니다.

추출된 표 데이터를 CSV로 내보내기

이제 PDF 파일에서 표를 추출하는 방법을 다뤘으니, 추출된 데이터로 할 수 있는 작업을 살펴봅시다. 추출된 표를 CSV 파일로 내보내는 것은 테이블 데이터를 처리하고 데이터 입력과 같은 작업을 자동화하는 유용한 방법입니다. 이 예제에서는 모의 데이터를 사용하여 표를 채운 후, PDF에서 표를 추출하고 이를 CSV 파일로 내보냈습니다.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using IronPDF;

class Program
{
    static void Main(string[] args)
    {
        string pdfPath = "table.pdf";
        string csvPath = "output.csv";

        // Extract and parse table data
        var tableData = ExtractTableDataFromPdf(pdfPath);

        // Write the extracted data to a CSV file
        WriteDataToCsv(tableData, csvPath);
        Console.WriteLine($"Data extracted and saved to {csvPath}");
    }

    static List<string[]> ExtractTableDataFromPdf(string pdfPath)
    {
        var pdf = PdfDocument.FromFile(pdfPath);

        // Extract text from the first page
        var text = pdf.ExtractTextFromPage(0); 
        var rows = new List<string[]>();

        // Split text into lines (rows)
        var lines = text.Split('\n');

        // Variable to hold column values temporarily
        var tempColumns = new List<string>();

        foreach (var line in lines)
        {
            var trimmedLine = line.Trim();

            // Check for empty lines or lines that don't contain table data
            if (string.IsNullOrEmpty(trimmedLine) || trimmedLine.Contains("Header"))
            {
                continue;
            }

            // Split line into columns. Adjust this based on how columns are separated.
            var columns = trimmedLine.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);

            if (columns.Length > 0)
            {
                // Add columns to temporary list
                tempColumns.AddRange(columns);
                rows.Add(tempColumns.ToArray());
                tempColumns.Clear(); // Clear temporary list after adding to rows
            }
        }

        return rows;
    }

    static void WriteDataToCsv(List<string[]> data, string csvPath)
    {
        using (var writer = new StreamWriter(csvPath))
        {
            foreach (var row in data)
            {
                // Join columns with commas and quote each field to handle commas within data
                var csvRow = string.Join(",", row.Select(field => $"\"{field.Replace("\"", "\"\"")}\""));
                writer.WriteLine(csvRow);
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using IronPDF;

class Program
{
    static void Main(string[] args)
    {
        string pdfPath = "table.pdf";
        string csvPath = "output.csv";

        // Extract and parse table data
        var tableData = ExtractTableDataFromPdf(pdfPath);

        // Write the extracted data to a CSV file
        WriteDataToCsv(tableData, csvPath);
        Console.WriteLine($"Data extracted and saved to {csvPath}");
    }

    static List<string[]> ExtractTableDataFromPdf(string pdfPath)
    {
        var pdf = PdfDocument.FromFile(pdfPath);

        // Extract text from the first page
        var text = pdf.ExtractTextFromPage(0); 
        var rows = new List<string[]>();

        // Split text into lines (rows)
        var lines = text.Split('\n');

        // Variable to hold column values temporarily
        var tempColumns = new List<string>();

        foreach (var line in lines)
        {
            var trimmedLine = line.Trim();

            // Check for empty lines or lines that don't contain table data
            if (string.IsNullOrEmpty(trimmedLine) || trimmedLine.Contains("Header"))
            {
                continue;
            }

            // Split line into columns. Adjust this based on how columns are separated.
            var columns = trimmedLine.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);

            if (columns.Length > 0)
            {
                // Add columns to temporary list
                tempColumns.AddRange(columns);
                rows.Add(tempColumns.ToArray());
                tempColumns.Clear(); // Clear temporary list after adding to rows
            }
        }

        return rows;
    }

    static void WriteDataToCsv(List<string[]> data, string csvPath)
    {
        using (var writer = new StreamWriter(csvPath))
        {
            foreach (var row in data)
            {
                // Join columns with commas and quote each field to handle commas within data
                var csvRow = string.Join(",", row.Select(field => $"\"{field.Replace("\"", "\"\"")}\""));
                writer.WriteLine(csvRow);
            }
        }
    }
}
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Linq
Imports IronPDF

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim pdfPath As String = "table.pdf"
		Dim csvPath As String = "output.csv"

		' Extract and parse table data
		Dim tableData = ExtractTableDataFromPdf(pdfPath)

		' Write the extracted data to a CSV file
		WriteDataToCsv(tableData, csvPath)
		Console.WriteLine($"Data extracted and saved to {csvPath}")
	End Sub

	Private Shared Function ExtractTableDataFromPdf(ByVal pdfPath As String) As List(Of String())
		Dim pdf = PdfDocument.FromFile(pdfPath)

		' Extract text from the first page
		Dim text = pdf.ExtractTextFromPage(0)
		Dim rows = New List(Of String())()

		' Split text into lines (rows)
		Dim lines = text.Split(ControlChars.Lf)

		' Variable to hold column values temporarily
		Dim tempColumns = New List(Of String)()

		For Each line In lines
			Dim trimmedLine = line.Trim()

			' Check for empty lines or lines that don't contain table data
			If String.IsNullOrEmpty(trimmedLine) OrElse trimmedLine.Contains("Header") Then
				Continue For
			End If

			' Split line into columns. Adjust this based on how columns are separated.
			Dim columns = trimmedLine.Split( { " "c, ControlChars.Tab }, StringSplitOptions.RemoveEmptyEntries)

			If columns.Length > 0 Then
				' Add columns to temporary list
				tempColumns.AddRange(columns)
				rows.Add(tempColumns.ToArray())
				tempColumns.Clear() ' Clear temporary list after adding to rows
			End If
		Next line

		Return rows
	End Function

	Private Shared Sub WriteDataToCsv(ByVal data As List(Of String()), ByVal csvPath As String)
		Using writer = New StreamWriter(csvPath)
			For Each row In data
				' Join columns with commas and quote each field to handle commas within data
				Dim csvRow = String.Join(",", row.Select(Function(field) $"""{field.Replace("""", """""")}"""))
				writer.WriteLine(csvRow)
			Next row
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

예제 PDF 파일

C#에서 PDF 파일로부터 테이블 데이터를 추출하는 방법: 그림 6

CSV 파일 출력

C#에서 PDF 파일로부터 테이블 데이터를 추출하는 방법: 그림 7

보시다시피, 우리는 PDF 표를 성공적으로 CSV로 내보냈습니다. 먼저, 표를 포함한 PDF를 로드하고 새 CSV 파일 경로를 생성했습니다. 그 다음, var tableData = ExtractTableDataFromPdf(pdfPath) 줄을 사용하여 ExtractTableDataFromPdf() 메서드를 호출해 테이블을 추출했습니다. 이 메서드는 테이블이 있는 PDF 페이지의 모든 텍스트를 추출하고 text 변수에 저장합니다.

그런 후, 텍스트를 줄과 열로 분할합니다. 이 분할 과정의 결과를 반환한 후, static void WriteDataToCsv() 메소드를 호출하여 추출된 분할 텍스트를 가져와 StreamWriter를 사용하여 CSV 파일에 씁니다.

팁 및 모범 사례

PDF 테이블 작업 시, 일부 기본 모범 사례를 따르십시오. 이렇게 하면 오류나 문제를 최소화할 수 있습니다.

  • PDF 사전 처리: 가능하다면, PDF를 사전 처리하여 일관된 형식을 보장하십시오. 이렇게 하면 추출 과정이 단순화됩니다.
  • 데이터 검증: 항상 추출된 데이터의 정확성과 완전성을 보장하기 위해 데이터를 검증하십시오.
  • 오류 처리: 텍스트 추출 또는 구문 분석 실패 시를 위한 오류 처리를 구현하십시오. 예를 들어, try-catch 블록 내에 코드를 래핑하시기 바랍니다.
  • 성능 최적화: 큰 PDF의 경우 성능 문제를 처리하기 위해 텍스트 추출 및 구문 분석을 최적화하는 것을 고려하십시오.

IronPDF 라이선스

IronPDF는 다양한 라이센싱 옵션을 제공하여 라이센스를 확정하기 전에 IronPDF가 제공하는 강력한 기능을 직접 시도해 볼 수 있게 해줍니다.

결론

IronPDF를 사용하여 PDF에서 테이블을 추출하는 것은 데이터 추출을 자동화하고, 분석을 용이하게 하며, 문서를 더 접근 가능한 형식으로 변환하는 강력한 방법입니다. 단순한 테이블이든 복잡하고 비정상적인 형식이든 IronPDF는 표 데이터를 효율적으로 추출하고 처리하는 데 필요한 도구를 제공합니다.

IronPDF를 사용하면 자동화된 데이터 입력, 문서 변환 및 데이터 분석과 같은 워크플로를 간소화할 수 있습니다. IronPDF가 제공하는 유연성과 고급 기능은 다양한 PDF 기반 작업을 처리하는 데 있어 가치 있는 도구가 되게 합니다.

자주 묻는 질문

C#을 사용하여 PDF에서 표를 어떻게 추출할 수 있습니까?

C#에서 IronPDF를 사용하여 PDF에서 표를 추출할 수 있습니다. IronPDF를 사용하여 PDF 문서를 로드하고 텍스트를 추출한 다음, 프로그래밍 방식으로 텍스트를 행과 열로 구문 분석합니다.

PDF 문서에서 표 데이터를 추출하는 것이 왜 어려운가요?

PDF는 주로 데이터 구조보다는 표현을 위해 설계되어 있어, 표와 같은 구조화된 데이터를 추출하는 것이 어렵습니다. IronPDF와 같은 도구는 이 데이터를 효과적으로 해석하고 추출하는 데 도움을 줍니다.

PDF에서 표를 추출하는 것의 이점은 무엇입니까?

PDF에서 표를 추출하면 데이터 입력을 자동화하고, 데이터 분석을 수행하며, 문서를 보다 접근 가능하게 변환하고, 감사 프로세스에서의 규정 준수를 보장할 수 있습니다.

PDF 추출에서 복잡한 표 형식을 어떻게 처리합니까?

IronPDF는 복잡하고 불규칙한 표 형식에서도 정확한 데이터 추출을 보장하는 표 데이터 추출 및 처리 기능을 제공합니다.

PDF에서 추출한 표 데이터를 CSV로 변환하는 과정은 무엇입니까?

IronPDF를 사용하여 PDF에서 표 데이터를 추출하고 구문 분석한 후, StreamWriter를 사용하여 구문 분석한 데이터를 CSV 파일로 내보낼 수 있습니다.

PDF 표 추출의 모범 사례는 무엇입니까?

일관된 형식을 위해 PDF를 사전 처리하고, 추출된 데이터를 검증하며, 오류 처리 및 큰 PDF 파일을 다룰 때 성능을 최적화합니다.

IronPDF가 감사 및 규정 준수 작업에 도움이 될 수 있습니까?

예, IronPDF는 PDF의 표 데이터를 추출하여 Excel 또는 CSV와 같은 형식으로 변환할 수 있어, 데이터를 검토 및 분석하기 쉽게 만들어 감사 및 규정 준수에 도움이 됩니다.

IronPDF는 어떤 라이선스 옵션을 제공하나요?

IronPDF는 체험판을 포함하여 다양한 라이선스 옵션을 제공하므로, 전체 라이선스를 구매하기 전에 기능을 탐색할 수 있습니다.

PDF에서 표를 추출할 때 발생할 수 있는 일반적인 문제 해결 시나리오는 무엇입니까?

일반적인 문제로는 일관되지 않은 표 형식 및 텍스트 추출 오류가 있습니다. IronPDF의 강력한 기능을 사용하면 정확한 구문 분석 기능을 제공하여 이러한 문제를 완화할 수 있습니다.

IronPDF는.NET 10과 완전히 호환되며 표 추출 작업 흐름에 어떠한 이익을 줍니까?

예 — IronPDF는 .NET 10(및 .NET 9, 8, 7, 6, Core, Standard, Framework)을 지원하여 최신 .NET 10 프로젝트에서 구성 문제 없이 사용할 수 있습니다. .NET 10 기반으로 개발하는 개발자는 PDF 처리 및 표 추출 작업을 가속화하는 데 도움을 주는, 할당 감소 및 향상된 JIT 컴파일러 최적화와 같은 런타임 성능 개선의 이점을 얻습니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해