PDF는 요즘 지배 문서 형식 중 하나입니다. 텍스트, 그래픽, 표, 주석 및 기타 다양한 요소를 지원합니다. 어떤 경우에는 송장과 같은 PDF 문서의 테이블에서 데이터를 추출해야 할 수도 있습니다. 이를 프로그래밍 방식으로 달성하기 위해 이 기사에서는 Java를 사용하여 PDF의 테이블에서 데이터를 추출하는 방법을 다룹니다.
PDF의 테이블에서 데이터 추출 - Java API
Java용 Aspose.PDF는 PDF 문서를 만들고 조작하기 위한 기능이 풍부한 API입니다. 이 API를 사용하여 PDF 문서의 테이블에서 데이터를 추출합니다. API의 JAR을 다운로드하거나 다음 Maven 구성을 사용하여 Java 애플리케이션 내에 설치할 수 있습니다.
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-pdf</artifactId>
<version>21.9</version>
</dependency>
Java에서 PDF의 테이블에서 데이터 추출
다음은 Java를 사용하여 PDF의 테이블에서 데이터를 추출하는 단계입니다.
- 먼저 Document 클래스를 사용하여 PDF 문서를 로드합니다.
- Document.getPages() 컬렉션을 사용하여 PDF의 페이지를 반복합니다.
- 반복할 때마다 TableAbsorber 개체를 초기화하고 TableAbsorber.visit(Page) 메서드를 사용하여 선택한 페이지를 방문합니다.
- 중첩 루프에서 TableAbsorber.getTableList() 컬렉션의 테이블 목록을 반복합니다.
- 컬렉션의 각 AbsorbedTable에 대해 AbsorbedTable.getRowList()의 행 컬렉션을 반복합니다.
- 컬렉션의 각 AbsorbedRow에 대해 AbsorbedRow.getCellList()의 셀 컬렉션을 반복합니다.
- 마지막으로 각 AbsorbedCell의 TextFragment 컬렉션을 반복하고 텍스트를 인쇄합니다.
다음 코드 샘플은 Java를 사용하여 PDF의 테이블에서 텍스트를 추출하는 방법을 보여줍니다.
// 원본 PDF 문서 로드
com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document("sample.pdf");
// 테이블 앱버버 만들기
com.aspose.pdf.TableAbsorber absorber = new com.aspose.pdf.TableAbsorber();
// 페이지 스캔
for (com.aspose.pdf.Page page : pdfDocument.getPages()) {
// 비스트 페이지
absorber.visit(page);
// 테이블 반복
for (com.aspose.pdf.AbsorbedTable table : absorber.getTableList()) {
System.out.println("Table");
// 행 목록 반복
for (com.aspose.pdf.AbsorbedRow row : table.getRowList()) {
// 셀의 전체 목록 반복
for (com.aspose.pdf.AbsorbedCell cell : row.getCellList()) {
// 텍스트 조각을 통해 반복
for (com.aspose.pdf.TextFragment fragment : cell.getTextFragments()) {
StringBuilder sb = new StringBuilder();
for (com.aspose.pdf.TextSegment seg : fragment.getSegments())
sb.append(seg.getText());
System.out.print(sb.toString() + "|");
}
}
System.out.println();
}
}
}
Java: PDF 페이지의 특정 영역에서 테이블 데이터 추출
다음은 Java를 사용하여 PDF 페이지의 특정 부분에서 테이블을 추출하는 단계입니다.
- 먼저 Document 클래스를 사용하여 PDF 문서를 로드합니다.
- 그런 다음 Document.getPages() 컬렉션에서 원하는 Page를 선택합니다.
- 페이지의 정사각형 주석을 추출합니다.
- 반복할 때마다 TableAbsorber 개체를 초기화하고 TableAbsorber.visit(Page) 메서드를 사용하여 선택한 페이지를 방문합니다.
- 중첩 루프에서 TableAbsorber.getTableList() 컬렉션의 테이블 목록을 반복합니다.
- 흡수된 테이블이 원하는 페이지 영역에 있는지 확인하십시오.
- 컬렉션의 각 AbsorbedTable에 대해 AbsorbedTable.getRowList()를 사용하여 행 컬렉션을 반복합니다.
- 컬렉션의 각 AbsorbedRow에 대해 AbsorbedRow.getCellList()를 사용하여 셀 컬렉션을 반복합니다.
- 마지막으로 각 AbsorbedCell의 TextFragment 컬렉션을 반복하고 텍스트를 인쇄합니다.
다음 코드 샘플은 PDF 페이지의 특정 영역에서 테이블을 추출하는 방법을 보여줍니다.
// 원본 PDF 문서 로드
com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document("sample.pdf");
// 원하는 페이지의 참조 가져오기
com.aspose.pdf.Page page = pdfDocument.getPages().get_Item(1);
// 주석 선택기 만들기
com.aspose.pdf.AnnotationSelector annotationSelector = new com.aspose.pdf.AnnotationSelector(
new com.aspose.pdf.SquareAnnotation(page, com.aspose.pdf.Rectangle.getTrivial()));
// 주석 목록 가져오기
java.util.List<com.aspose.pdf.Annotation> list = annotationSelector.getSelected();
if (list.size() == 0) {
System.out.println("Marked tables not found..");
return;
}
// 정사각형 주석 만들기
com.aspose.pdf.SquareAnnotation squareAnnotation = (com.aspose.pdf.SquareAnnotation) list.get(0);
// 테이블 업소버 생성 및 페이지 방문
com.aspose.pdf.TableAbsorber absorber = new com.aspose.pdf.TableAbsorber();
absorber.visit(page);
// 테이블 반복
for (com.aspose.pdf.AbsorbedTable table : absorber.getTableList()) {
{
// 테이블이 존재하는지 확인
boolean isInRegion = (squareAnnotation.getRect().getLLX() < table.getRectangle().getLLX())
&& (squareAnnotation.getRect().getLLY() < table.getRectangle().getLLY())
&& (squareAnnotation.getRect().getURX() > table.getRectangle().getURX())
&& (squareAnnotation.getRect().getURY() > table.getRectangle().getURY());
if (isInRegion) {
for (com.aspose.pdf.AbsorbedRow row : table.getRowList()) {
{
for (com.aspose.pdf.AbsorbedCell cell : row.getCellList()) {
for (com.aspose.pdf.TextFragment fragment : cell.getTextFragments()) {
StringBuilder sb = new StringBuilder();
for (com.aspose.pdf.TextSegment seg : fragment.getSegments())
sb.append(seg.getText());
System.out.print(sb.toString() + "|");
}
}
System.out.println();
}
}
}
}
}
무료 라이선스 받기
임시 라이선스를 사용하여 평가 제한 없이 Java용 Aspose.PDF를 사용할 수 있습니다.
결론
이 기사에서는 Java를 사용하여 PDF의 테이블에서 데이터를 추출하는 방법을 배웠습니다. 또한 이 기사에서는 PDF 페이지의 특정 영역에서 표를 추출하는 방법에 대해 설명했습니다. 또한 문서를 사용하여 Java용 Aspose.PDF에 대해 자세히 알아볼 수 있습니다. 또한 포럼을 통해 질문할 수 있습니다.