PDF 검색 단어를 강조 표시합니다. 직사각형이 기울임꼴 텍스트를 잘못 구성하는 이유는 무엇입니까?

기울임꼴 글꼴은 검색된 쿼드의 영역을 둘러싸는 직사각형보다 반드시 작게 만드는 것은 아닙니다. 네 모서리 방향 정보를 유지해야 하는 경우, 쿼드=True 결과를 직접 사용하여 강조 표시를 추가합니다. 강조 표시가 올바른지 확인하기 위해 면적 차이 임계값을 사용하지 마십시오.

이탤릭체 텍스트에 대한 검색 강조 상자가 기울어지는 경우 글꼴 자체에 문제가 있어서가 아니라 강조에 사용된 기하학적 개체를 잘못 선택했기 때문에 발생하는 경우가 많습니다. 이 문서는 PyMuPDF를 사용하여 PDF 텍스트 위치 지정을 처리하는 개발자를 위한 것입니다. 둘러싸는 직사각형(Rect)을 사용하여 기울임꼴 또는 회전된 텍스트의 강조 표시가 올바른지 확인하고 다양한 상황에서 이를 처리하는 방법을 설명합니다.

이 기사를 읽은 후에는 검색 결과에 Quad 또는 Rect를 사용할지 여부를 결정할 수 있고 검색 시 히트 없음, 교차 행, 다중 히트 및 CropBox 자르기를 처리하는 방법을 알 수 있으며 어떤 문제가 기하학적 위치 지정의 범위를 벗어나는지 이해할 수 있습니다.

전체 텍스트는 합성 샘플로 시연되었으며 코드는 격리된 환경에서 샘플 검사를 통과했지만 이것이 모든 실제 파일이나 제품 효과를 보장하지는 않습니다. 중요한 서류를 처리하기 전, 원본을 보관하신 후, 아래의 범위 및 접수사항에 따라 검토하시기 바랍니다.

기울임꼴 텍스트를 강조 표시하려면 Quad 또는 Rect?를 선택하세요. 한 문장 결론

기울임꼴 글꼴은 검색으로 얻은 쿼드 영역을 둘러싸는 직사각형보다 작게 만들지는 않습니다. 네 모서리 방향 정보를 유지해야 하는 경우 quads=True 결과를 직접 사용하여 하이라이트를 추가합니다. 강조 표시가 올바른지 확인하기 위해 면적 차이 임계값을 사용하지 마십시오.

당신의 상황권장 사례이유
기울임꼴 또는 회전된 텍스트, 네 모서리 방향을 유지해야 합니다.quads=True의 결과를 직접 사용하여 하이라이트 추가쿼드는 네 모서리 방향 정보를 유지합니다.
강조 표시가 올바른지 확인하기 위해 면적 차이 임계값을 사용하고 싶습니다.이러지 마세요기울임꼴 글꼴이 반드시 쿼드 영역을 더 작게 만드는 것은 아니며 임계값 판단을 신뢰할 수 없습니다.
검색어는 여러 줄에 걸쳐 있으며 엔진은 이를 동일한 어휘 단위로 인식하지 않습니다.반환된 모든 쿼드 조각을 유지하고 하이라이트를 개별적으로 그립니다.Rect에 강제로 병합하면 중간에 있는 공백의 의미가 손실됩니다.
페이지에 자르기 상자 자르기가 있습니다.CropBox를 복원한 후에도 콘텐츠가 여전히 볼 수 있는 영역 내에 있는지 확인하세요.search_for에서 반환된 좌표는 회전되지 않은 원래 페이지 공간을 기반으로 하며 가정할 수 없습니다. get_text는 기본적으로 잘린 영역을 무시합니다.
다중 히트항목별로 페이지 번호를 유지하고 하나씩 처리합니다.첫 번째 작업만 처리하면 나머지 위치가 누락됩니다.

기울임꼴 텍스트가 잘못 나타나는 이유는 무엇입니까?

많은 사람들은 기본적으로 이탤릭체 문자로 둘러싸인 직사각형이 쿼드보다 훨씬 크다고 가정하므로 Rect를 사용하여 강조 표시하면 "프레임 편차"가 발생합니다. 실제로 이탤릭체는 검색된 쿼드의 영역을 둘러싸는 직사각형보다 반드시 작게 만드는 것은 아니므로 영역 차이를 사용하여 강조 표시가 올바른지 판단하는 것은 신뢰할 수 없습니다.

실제로 필요한 것은 네 모서리의 방향 정보를 보존하는 것입니다. Quad는 우연히 이 정보를 기록하고 이를 사용하여 하이라이트를 직접 추가하는 것이 모양을 추측하기 위해 둘러싸는 직사각형을 사용하는 것보다 더 안정적입니다.

독립형 구성 예

종속성 예는 가져오기 목록을 참조하세요. 코드는 메모리에 입력을 구성하며 실행하는 데 외부 파일이 필요하지 않습니다. 작업 기록은 별도로 제공되며 모든 문서의 진위를 보장하지는 않습니다.

import pymupdf
with pymupdf.open() as source:
    page = source.new_page(width=300, height=300)
    page.insert_text((100, 250), "Searchable", fontsize=14, rotate=90)
    hits = page.search_for("Searchable", quads=True)
    assert len(hits) == 1
    assert isinstance(hits[0], pymupdf.Quad)
    page.add_highlight_annot(hits)
    assert page.search_for("Missing", quads=True) == []
    raw = source.tobytes()
with pymupdf.open(stream=raw, filetype="pdf") as doc:
    page = doc[0]  # Keep the owning page alive while using annotations.
    annotations = list(page.annots())
    assert len(annotations) == 1
    assert len(annotations[0].vertices) == 4

올바른 출력 및 경계 입력 처리

위의 합성 예는 Quad의 동작을 확인하는 데 사용되는 메모리 내 PDF를 생성합니다. 다음은 몇 가지 일반적인 경계 입력입니다.

1. 검색어는 여러 줄에 걸쳐 있습니다.

검색어가 줄 바꿈을 포함하고 엔진이 이를 동일한 어휘 단위로 인식하지 못하는 경우 search_for는 빈 목록을 반환하거나 부분 조각만 일치시킬 수 있습니다.

  • 인접하지 않은 여러 쿼드를 하나의 Rect로 강제로 병합하지 마십시오. 그렇지 않으면 중간에 있는 공백의 의미가 손실됩니다.
  • 반환된 모든 쿼드 조각을 유지하고 하이라이트를 별도로 그립니다.

2. 검색어에 일반 특수문자가 포함되어 있습니다.

검색어에 일반 특수 문자가 이스케이프 처리 없이 포함되어 있으면 결과가 예상과 다를 수 있습니다. 호출하기 전에 입력 문자열을 안전하게 처리해야 합니다.

3. 자르기상자 자르기

페이지에 자르기 상자 자르기가 있는 경우 search_for에서 반환된 좌표는 여전히 회전되지 않은 원래 페이지 공간을 기반으로 합니다. CropBox를 복원한 후 콘텐츠가 여전히 표시 영역 내에 있는지 확인해야 합니다. get_text가 기본적으로 자르기 영역을 무시한다고 가정할 수는 없습니다.

허용 기준 및 직접 검토 경계

이 솔루션은 기하학적 위치 문제만 해결합니다. 다음 상황은 Quad와 Rect 중 하나를 선택하는 문제가 아닙니다.

  • PDF 자체의 텍스트 레이어가 손상되었습니다.
  • 비정상적인 글꼴 삽입;
  • 숨겨진 레이어가 있습니다.

이러한 경우 search_for의 결과는 전혀 신뢰할 수 없으므로 수동 검토 또는 재OCR에 제출해야 합니다. 샘플 코드는 기하학적 특성만 확인하며, 특정 문서 유형을 기반으로 엔드투엔드 효과를 평가해야 합니다.

특정 예외 처리 결정

관찰하다무엇을 해야할지추론해서는 안 된다
검색 결과 없음텍스트 레이어 및 키워드 확인빈 하이라이트를 만들지 마세요
텍스트 회전쿼드 코너 유지면적 차이 없는 정확도 추측
다중 히트항목별로 페이지 번호 유지첫 번째 것만 다루지 마세요.

📊 핵심 비교

물체보유할 수 있는 정보적용 가능한 시나리오주의할 점
Quad네거리기울임꼴, 회전된 텍스트, 정확한 강조 표시 필요quads=True의 결과를 직접 사용
Rect(둘러싸는 직사각형)외부 범위가로 텍스트에 대한 간단한 프레임 선택기울임꼴 또는 회전된 텍스트는 프레임을 벗어날 수 있으며 정확성을 판단하는 데 적합하지 않습니다.
병합된 사각형전반적인 범위교차선 검색에는 권장되지 않습니다.중간에 있는 공백의 의미가 손실됩니다.

🎯 어떤 방법이 당신에게 적합합니까?

만약 당신이…

  • 텍스트의 네 모서리 방향을 유지해야 합니다: quads=True의 결과를 직접 사용하여 하이라이트를 추가합니다.
  • 영역 차이 임계값을 사용하여 강조 표시가 올바른지 확인하려는 경우: 이 작업을 수행하지 마십시오. 기울임꼴 글꼴이 반드시 쿼드 영역을 더 작게 만드는 것은 아닙니다.
  • 검색어 교차 선 발생: 모든 쿼드 조각을 유지하고 하이라이트를 별도로 그리며 하나의 Rect로 병합하지 않습니다.
  • 자르기 상자 자르기로 페이지 처리: 자르기 상자를 복원한 후 콘텐츠가 여전히 볼 수 있는 영역 내에 있는지 확인하세요.

문서 번역에 이 체크리스트를 사용하세요

먼저 페이지 순서, 소스 위치 및 텍스트 무결성을 확인한 다음 동일한 둔감 샘플을 번역 프로세스에 제출하세요. 번역 후에도 제목, 텍스트, 일러스트레이션이 올바르게 일치하는지 확인해야 합니다. 텍스트가 매끄러운지 여부만 확인할 수는 없습니다.

OmniDoc(제품 포털)는 다양한 형식의 문서 번역 포털을 제공하며 공식 웹사이트에서는 OCR, 용어집 및 이중 언어 비교 기능을 소개합니다. 파일에서 직접 작업하려는 팀의 경우 이는 실제 샘플을 사용하여 평가할 가치가 있는 경로입니다. 업로드 권한이 있는 둔감화된 파일을 사용하시고, 이 글의 확인 항목을 사용하여 결과를 검토하시기 바랍니다. OmniDoc이 이 기사에 언급된 오픈 소스 라이브러리나 내부 알고리즘을 사용한다는 주장은 없으며 예제는 제품 성능 테스트를 대체하지 않습니다.

참고자료

❓ 자주 묻는 질문(FAQ)

1. 기울임꼴 텍스트가 쿼드 영역을 확실히 더 작게 만들까요?

불확실한. 기울임꼴 글꼴은 검색된 쿼드의 영역을 둘러싸는 직사각형보다 반드시 작게 만드는 것은 아니므로 강조 표시가 올바른지 여부를 영역 차이에 의존할 수는 없습니다.

2. 쿼드 코너 정보는 언제 유지해야 합니까?

네 모서리 방향 정보를 유지해야 하는 경우 quads=True의 결과를 직접 사용하여 하이라이트를 추가해야 합니다.

3. 검색어가 줄을 넘어 검색결과가 없습니다. 어떻게 해야 하나요?

빈 하이라이트를 만들지 말고 먼저 텍스트 레이어와 키워드를 확인하세요. 일부 조각만 반환되는 경우 반환된 모든 쿼드 조각은 유지되어야 하며 하이라이트는 단일 Rect에 강제로 적용되지 않고 별도로 그려져야 합니다.

4. 크롭박스로 페이지를 자를 때 주의할 점은 무엇인가요?

search_for에서 반환된 좌표는 여전히 회전되지 않은 원래 페이지 공간을 기반으로 합니다. CropBox를 복원한 후 콘텐츠가 여전히 표시 영역 내에 있는지 확인해야 합니다. get_text가 기본적으로 자르기 영역을 무시한다고 가정할 수 없습니다.

📝 요약

기울임꼴 및 회전된 텍스트의 강조 표시는 쿼드를 기준으로 해야 하며 페이지 번호 및 네 모서리 정보는 항목별로 유지되어야 합니다. 텍스트 레이어 손상, 비정상적인 글꼴 포함 등의 문제는 여전히 수동 검토 또는 재OCR이 필요합니다.

OmniDoc Desktop을 무료로 다운로드하세요. 문서, 스프레드시트, 프리젠테이션 및 PDF가 모두 한곳에 있습니다.

업데이트: 2026-11-13