PDF는 다양한 분야에서 가장 널리 사용되는 문서 형식 중 하나가 되었습니다. 다양한 경우에 데이터가 표 형식으로 표시되는 송장을 생성하는 데 사용됩니다. 이러한 경우 프로그래밍 방식으로 테이블에서 데이터를 읽으려면 PDF를 구문 분석해야 할 수 있습니다. 이를 달성하기 위해 이 기사에서는 C#을 사용하여 PDF 테이블에서 데이터를 추출하는 방법을 다룹니다.
PDF에서 테이블을 추출하는 C# API
PDF 파일의 테이블에서 데이터를 추출하기 위해 Aspose.PDF for .NET을 사용합니다. 광범위한 PDF 조작 기능을 제공하는 강력한 API입니다. API를 다운로드하거나 NuGet을 사용하여 설치할 수 있습니다.
PM> Install-Package Aspose.PDF
C#의 PDF 테이블에서 데이터 추출
다음은 C#을 사용하여 PDF의 테이블에서 데이터를 추출하는 단계입니다.
- Document 클래스를 사용하여 PDF 문서를 로드합니다.
- Document.Pages 컬렉션을 사용하여 PDF의 페이지를 반복합니다.
- 반복할 때마다 TableAbsorber 개체를 초기화하고 TableAbsorber.Visit(Page) 메서드를 사용하여 선택한 페이지를 방문합니다.
- 중첩 루프에서 TableAbsorber.TableList 컬렉션의 테이블 목록을 반복합니다.
- 컬렉션의 각 AbsorbedTable에 대해 AbsorbedTable.RowList의 행 컬렉션을 반복합니다.
- 컬렉션의 각 AbsorbedRow에 대해 AbsorbedRow.CellList의 셀 컬렉션을 반복합니다.
- 마지막으로 각 AbsorbedCell의 TextFragments 컬렉션을 반복하고 텍스트를 인쇄합니다.
다음 코드 샘플은 C#의 PDF 테이블에서 텍스트를 추출하는 방법을 보여줍니다.
// 원본 PDF 문서 로드
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf");
// 페이지 반복
foreach (var page in pdfDocument.Pages)
{
// 테이블 업소버를 만들고 페이지를 방문하십시오.
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);
// 각 흡수된 테이블을 통해 루프
foreach (AbsorbedTable table in absorber.TableList)
{
Console.WriteLine("Table");
// 테이블의 각 행을 반복합니다.
foreach (AbsorbedRow row in table.RowList)
{
// 행의 각 셀을 반복합니다.
foreach (AbsorbedCell cell in row.CellList)
{
// 텍스트 조각 반복
foreach (TextFragment fragment in cell.TextFragments)
{
var sb = new StringBuilder();
foreach (TextSegment seg in fragment.Segments)
sb.Append(seg.Text);
Console.Write($"{sb.ToString()}|");
}
}
Console.WriteLine();
}
}
}
페이지의 특정 영역에서 테이블 추출
다음은 C#을 사용하여 PDF 페이지의 특정 부분에서 테이블을 추출하는 단계입니다.
- Document 클래스를 사용하여 PDF 문서를 로드합니다.
- Document.Pages 모음에서 원하는 Page를 선택합니다.
- 페이지의 정사각형 주석을 추출합니다.
- TableAbsorber 개체를 초기화하고 TableAbsorber.Visit(Page) 메서드를 사용하여 페이지를 방문합니다.
- 중첩 루프에서 TableAbsorber.TableList 컬렉션의 테이블 목록을 반복합니다.
- 테이블이 해당 지역에 있는 경우 다음 단계를 수행하십시오.
- AbsorbedTable.RowList의 행 컬렉션을 반복합니다.
- 컬렉션의 각 AbsorbedRow에 대해 AbsorbedRow.CellList의 셀 컬렉션을 반복합니다.
- 마지막으로 각 AbsorbedCell의 TextFragments 컬렉션을 반복하고 텍스트를 인쇄합니다.
다음 코드 샘플은 PDF 페이지의 특정 영역에서 테이블을 추출하는 방법을 보여줍니다.
// 원본 PDF 문서 로드
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf");
// 페이지를 선택하고 정사각형 주석을 추출합니다.
var page = pdfDocument.Pages[1];
var squareAnnotation =
page.Annotations.FirstOrDefault(ann => ann.AnnotationType == Annotations.AnnotationType.Square)
as Annotations.SquareAnnotation;
// 테이블 업소버 생성 및 페이지 방문
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);
// 목록의 각 흡수된 테이블을 반복합니다.
foreach (AbsorbedTable table in absorber.TableList)
{
var isInRegion = (squareAnnotation.Rect.LLX < table.Rectangle.LLX) &&
(squareAnnotation.Rect.LLY < table.Rectangle.LLY) &&
(squareAnnotation.Rect.URX > table.Rectangle.URX) &&
(squareAnnotation.Rect.URY > table.Rectangle.URY);
if (isInRegion)
{
// 테이블의 각 행을 통해 루프
foreach (AbsorbedRow row in table.RowList)
{
// 행의 각 셀을 반복합니다.
foreach (AbsorbedCell cell in row.CellList)
{
// 텍스트 조각을 반복하고 텍스트를 인쇄하십시오.
foreach (TextFragment fragment in cell.TextFragments)
{
var sb = new StringBuilder();
foreach (TextSegment seg in fragment.Segments)
{
sb.Append(seg.Text);
}
var text = sb.ToString();
Console.Write($"{text}|");
}
}
Console.WriteLine();
}
}
}
무료 라이선스 받기
임시 라이선스를 사용하여 평가 제한 없이 Aspose.PDF for .NET을 사용할 수 있습니다.
결론
이 기사에서는 C#을 사용하여 PDF의 테이블에서 데이터를 추출하는 방법을 배웠습니다. 또한 PDF에서 페이지의 특정 영역에서 표를 추출하는 방법을 살펴보았습니다. 문서를 사용하여 C# PDF API에 대해 자세히 알아볼 수 있습니다. 또한 포럼에 질문을 게시할 수 있습니다.