텍스트 추출
텍스트 추출
Aspose.PDF FOSS for .NET은 PDF 페이지에서 텍스트를 추출하기 위한 여러 메커니즘을 제공합니다. TextFragmentAbsorber은 기본 도구이며 — 페이지 내용을 스캔하고 위치, 글꼴 및 스타일 정보를 포함한 구조화된 TextFragment 객체를 반환합니다.
기본 텍스트 추출
TextAbsorber은 페이지 또는 문서에서 모든 텍스트를 단일 문자열로 추출합니다.
using var doc = Document.Open(pdfBytes);
var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);
string pageText = absorber.Text;텍스트 조각 추출
TextFragmentAbsorber은 구조화된 결과를 제공합니다. 각 TextFragment은 추출된 텍스트, 페이지상의 위치 및 글꼴 세부 정보를 포함합니다.
using var doc = Document.Open(pdfBytes);
var absorber = new TextFragmentAbsorber();
doc.Pages[1].Accept(absorber);
foreach (var fragment in absorber.TextFragments)
{
Console.WriteLine($"Text: {fragment.Text}");
Console.WriteLine($"Position: ({fragment.Position.XIndent}, {fragment.Position.YIndent})");
Console.WriteLine($"Font: {fragment.TextState.Font.FontName}");
}정규 표현식으로 검색
특정 텍스트를 찾기 위해 TextFragmentAbsorber에 정규식 패턴을 전달하십시오.
var absorber = new TextFragmentAbsorber(@"\d{3}-\d{2}-\d{4}");
doc.Pages.Accept(absorber); // Search all pages
foreach (var fragment in absorber.TextFragments)
{
Console.WriteLine($"Found: {fragment.Text}");
}텍스트 세그먼트
각 TextFragment는 텍스트가 서로 다른 글꼴 실행으로 구분될 때 여러 TextSegment 객체를 포함할 수 있습니다.
foreach (var fragment in absorber.TextFragments)
{
foreach (var segment in fragment.Segments)
{
Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
}
}폰트 관리
FontRepository는 글꼴을 찾고 로드하는 메서드를 제공합니다.
var font = FontRepository.FindFont("Helvetica");텍스트 단락 만들기
TextParagraph 은 페이지에 삽입할 다중 행 텍스트 블록을 구성할 수 있게 합니다.
var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));팁 및 모범 사례
- 위치 및 글꼴 데이터가 필요할 때는
TextFragmentAbsorber을 사용하고, 일반 텍스트 추출에는TextAbsorber을 사용하십시오. - 더 빠른 결과를 위해 단일 페이지에서 흡수기를 적용하거나, 전체 문서를 검색하려면
doc.Pages을 사용하십시오. - 정규식 검색은 기본적으로 대소문자를 구분합니다 — 대소문자를 구분하지 않으려면
(?i)접두사를 사용하십시오. - PDF에 글꼴이 포함되어 있는지 확인하려면
TextState.Font.IsEmbedded을 확인하십시오. - 대용량 문서의 경우 메모리 사용량을 관리하기 위해 페이지를 하나씩 처리하십시오.
일반적인 문제
| Issue | Cause | Fix |
|---|---|---|
| Extracted text is garbled | PDF uses a non-standard encoding or CID font mapping | Check font embedding; some scanned PDFs require OCR |
| No text fragments found | Page content is an image, not text | Use an OCR tool to convert image pages to text first |
| Regex returns no matches | Pattern does not account for whitespace inserted by PDF text layout | Normalize whitespace or use a looser pattern |
TextState.Font is null | Font resource is missing from the PDF | Handle null checks when inspecting font properties |
자주 묻는 질문
페이지의 특정 영역에서 텍스트를 추출할 수 있나요?
예. TextFragmentAbsorber.TextSearchOptions.Rectangle를 설정하여 검색을 페이지의 특정 영역으로 제한합니다.
텍스트 추출이 읽기 순서를 유지합니까?
라이브러리는 텍스트를 콘텐츠 스트림 순서대로 반환합니다. 다중 열 레이아웃의 경우, 위치에 따라 조각을 정렬해야 할 수 있습니다.
한 번에 모든 페이지에서 텍스트를 추출할 수 있나요?
예. doc.Pages.Accept(absorber)을 호출하여 문서의 모든 페이지를 검색합니다.
API 참조 요약
| Class / Method | Description |
|---|---|
TextAbsorber | 전체 텍스트를 단일 문자열로 추출합니다 |
TextFragmentAbsorber | 위치 및 글꼴 데이터가 포함된 구조화된 텍스트 조각을 추출합니다 |
TextFragment | 위치, 텍스트 상태 및 세그먼트를 포함하는 텍스트 실행 |
TextFragment.Text | 추출된 텍스트 문자열 |
TextFragment.Position | 페이지상의 좌표 |
TextFragment.TextState | 글꼴, 크기 및 색상 정보 |
TextFragment.Segments | 조각 내의 하위 실행 |
TextParagraph | 다중 행 텍스트 블록용 빌더 |
TextState | 글꼴 이름, 크기, 색상 및 스타일 속성 |
FontRepository | 정적 글꼴 조회 및 로드 |
FontRepository.FindFont | 이름으로 글꼴 찾기 |