PDF 파일은 인터넷을 통해 문서를 교환하기 위한 표준 형식입니다. 인보이스 및 제품 가이드와 같은 문서는 일반적으로 PDF 형식으로 공유됩니다. 추가로 추출 및 처리해야 하는 표 형식 데이터가 포함된 여러 송장이 있는 상황이 있을 수 있습니다. 이 데이터를 프로그래밍 방식으로 추출하는 것이 더 효율적입니다. 이를 위해 이 기사에서는 C++를 사용하여 PDF 테이블에서 데이터를 추출하는 방법을 설명합니다.
PDF 파일의 테이블에서 데이터 추출을 위한 C++ API
Aspose.PDF for C++는 PDF 파일을 만들고 읽고 업데이트할 수 있는 C++ 라이브러리입니다. 또한 API는 PDF 파일의 테이블에서 데이터 추출을 지원합니다. NuGet을 통해 API를 설치하거나 다운로드 섹션에서 직접 다운로드할 수 있습니다.
PM> Install-Package Aspose.PDF.Cpp
C++를 사용하여 PDF 테이블에서 데이터 추출
다음은 PDF 테이블에서 데이터를 추출하는 단계입니다.
- Document 클래스를 사용하여 PDF 문서를 로드합니다.
- Document->getPages() 메서드를 사용하여 문서의 페이지를 반복합니다.
- 각 반복에서 TableAbsorber 클래스의 인스턴스를 만들고 TableAbsorber->Visit(System::SharedPtr 페이지) 메서드.
- TableAbsorber->getTableList() 메서드를 사용하여 테이블을 가져오고 반복합니다.
- 각 AbsorbedTable에 대해 AbsorbedTable->getRowList() 메서드를 사용하여 행을 반복합니다.
- 각 AbsorbedRow에 대해 AbsorbedRow->getCellList() 메서드를 사용하여 셀을 반복합니다.
- AbsorbedCell->getTextFragments() 메서드를 사용하여 각 AbsorbedCell에 대해 TextFragmentCollection를 가져오고 이를 반복합니다.
- TextFragment->getSegments() 메서드를 사용하여 각 TextFragment에 대해 TextSegmentCollection을 가져오고 반복합니다.
- 각 TextSegment에서 텍스트를 검색하고 인쇄합니다.
다음 샘플 코드는 C++를 사용하여 PDF 테이블에서 데이터를 추출하는 방법을 보여줍니다.
// PDF 문서 로드
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input3.pdf");
// 문서의 페이지를 반복합니다.
for (auto page : pdfDocument->get_Pages())
{
// TableAbsorber 클래스의 인스턴스 만들기
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// 테이블을 통해 반복
for (auto table : absorber->get_TableList())
{
Console::WriteLine(u"Table");
// 행 반복
for (auto row : table->get_RowList())
{
// 셀 반복
for (auto cell : row->get_CellList())
{
// 텍스트 조각을 통해 반복
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// 텍스트 세그먼트를 통해 반복
for (auto seg : fragment->get_Segments())
{
// 텍스트 가져오기
string = String::Concat(string, seg->get_Text());
}
// 텍스트 인쇄
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
PDF 페이지의 특정 영역에 있는 테이블에서 데이터 추출
PDF 페이지의 특정 영역에 있는 테이블에서 데이터를 추출하려면 다음 단계를 따르십시오.
- Document 클래스를 사용하여 PDF 문서를 로드합니다.
- Document->getPages()->idxget(int32t index) 메서드를 사용하여 테이블이 포함된 페이지를 검색합니다.
- 주석을 반복하고 정사각형 주석을 가져옵니다.
- TableAbsorber 클래스의 인스턴스를 만들고 TableAbsorber->Visit(System::SharedPtr)를 사용하여 테이블 추출 페이지를 지정합니다. 페이지) 메서드입니다.
- TableAbsorber->getTableList() 메서드를 사용하여 테이블을 가져오고 반복합니다.
- 테이블이 지역에 있는 경우 다음 단계를 수행합니다.
- AbsorbedTable->getRowList() 메서드를 사용하여 AbsorbedTable의 행을 반복합니다.
- 각 AbsorbedRow에 대해 AbsorbedRow->getCellList() 메서드를 사용하여 셀을 반복합니다.
- AbsorbedCell->getTextFragments() 메서드를 사용하여 각 AbsorbedCell에 대해 TextFragmentCollection을 가져오고 이를 반복합니다.
- TextFragment->getSegments() 메서드를 사용하여 각 TextFragment에 대해 TextSegmentCollection을 가져오고 이를 반복합니다.
- 각 TextSegment에서 텍스트를 검색하고 인쇄합니다.
다음 샘플 코드는 C++를 사용하여 PDF 페이지의 특정 영역에 있는 테이블에서 데이터를 추출하는 방법을 보여줍니다.
// PDF 문서 로드
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input4.pdf");
// 문서의 첫 페이지 가져오기
auto page = pdfDocument->get_Pages()->idx_get(1);
// 페이지의 주석을 통해 반복
for (auto annotation : page->get_Annotations())
{
// 주석 유형 확인
if (annotation->get_AnnotationType() == Annotations::AnnotationType::Square)
{
System::SharedPtr<SquareAnnotation> squareAnnotation = DynamicCast<SquareAnnotation>(annotation);
// TableAbsorber 클래스의 인스턴스 만들기
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// 테이블을 통해 반복
for (auto table : absorber->get_TableList())
{
// 테이블이 지역에 있는지 확인
if ((squareAnnotation->get_Rect()->get_LLX() < table->get_Rectangle()->get_LLX()) &&
(squareAnnotation->get_Rect()->get_LLY() < table->get_Rectangle()->get_LLY()) &&
(squareAnnotation->get_Rect()->get_URX() > table->get_Rectangle()->get_URX()) &&
(squareAnnotation->get_Rect()->get_URY() > table->get_Rectangle()->get_URY())
)
{
// 행 반복
for (auto row : table->get_RowList())
{
// 셀 반복
for (auto cell : row->get_CellList())
{
// 텍스트 조각을 통해 반복
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// 텍스트 세그먼트를 통해 반복
for (auto seg : fragment->get_Segments())
{
// 텍스트 가져오기
string = String::Concat(string, seg->get_Text());
}
// 텍스트 인쇄
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
break;
}
}
무료 라이선스 받기
평가 제한 없이 API를 사용해 보려면 무료 임시 라이선스를 요청할 수 있습니다.
결론
이 기사에서는 C++를 사용하여 PDF 테이블에서 데이터를 추출하는 방법을 배웠습니다. 또한 PDF 페이지의 특정 영역에 있는 테이블에서 데이터를 추출하는 방법을 배웠습니다. Aspose.PDF for C++ API는 PDF 파일 작업을 위한 많은 추가 기능을 제공합니다. API에 대한 자세한 내용은 공식 문서에서 확인할 수 있습니다. 질문이 있는 경우 무료 지원 포럼을 통해 언제든지 문의하십시오.