PDF를 볼 수는 있지만 복사할 수는 없습니다. 스캔이 아닐 수도 있습니다. 먼저 텍스트 레이어와 문자 매핑을 확인하세요.
텍스트가 없으면 "텍스트 레이어가 정상"이라고 직접 판단할 수 없으며 스캔 사본이라고 직접 판단할 수도 없습니다. 텍스트, 대체 문자 및 페이지 이미지 참조가 각각 아래에 기록되고 검토할 상태가 출력됩니다. 이미지 참조는 이미지가 페이지 전체를 덮었다거나 텍스트를 식별할 수 있다는 것을 증명하지 않습니다.
PDF의 텍스트를 볼 수 있지만 복사할 수 없는 경우 스캔한 사본이 아니거나 문자 매핑에 문제가 있을 수 있습니다. 이 문서는 PDF 콘텐츠를 추출, 번역 또는 구조화해야 하는 개발자 및 문서 처리자를 위해 작성되었습니다. 읽고 나면 먼저 텍스트 수준의 문제와 이미지 콘텐츠를 구별하는 방법을 알게 되고, 통일된 신호를 사용하여 다음에 무엇을 해야 할지 결정하게 됩니다.
여기에 나온 코드와 예제는 격리된 환경에서 샘플 검사를 통과한 합성 샘플을 사용하고 있으며 모든 실제 파일이나 제품 성능을 보장하지는 않습니다. 중요한 서류를 처리하기 전, 원본을 보관하시고, 본문에 기재된 경계 및 허용 항목에 따라 검토하시기 바랍니다.
PDF를 볼 수는 있지만 복사할 수는 없습니다. 스캔본인가요? 한 문장 결론
직접적으로 판단할 수는 없습니다. 텍스트 레이어와 문자 매핑을 먼저 확인한 다음 페이지 이미지를 보고 마지막으로 스캔 실패인지 매핑 실패인지 확인합니다.
| 당신의 상황 | 권장 사례 | 이유 |
|---|---|---|
| 텍스트를 볼 수 있고, 깨진 문자나 공백을 복사할 수 있습니다. | ToUnicode 매핑 및 글꼴 인코딩 확인 | 시각적인 것은 정상이지만 대부분 매핑이 누락되거나 잘못되어 텍스트 레이어가 손상되었습니다. |
| 복사된 문자는 합리적으로 보이지만 의미가 올바르지 않습니다. | 시각적 콘텐츠에 대한 추출 결과 확인 | 경험적 매핑은 잘못된 문자를 출력하고 null이 아닌 검사를 통과할 수 있습니다. |
| 글은 없지만 페이지에 사진이 있어요 | 이미지에 텍스트가 포함되어 있는지 확인한 다음 OCR이 필요한지 확인하세요. | 이미지 인용은 전체 페이지 스캔과 동일하지 않으며 텍스트를 읽을 수 있음을 증명하지도 않습니다. |
| 텍스트나 이미지 모두 체크아웃되지 않습니다. | 페이지 그림 내용 보기 | 페이지가 비어 있다고 결론을 내릴 방법이 없습니다. |
복사한 코드가 왜 깨졌나요?
사용자는 브라우저나 리더에서 텍스트를 정상적으로 볼 수 있지만 복사된 텍스트는 깨졌거나 공백이거나 관련 없는 기호입니다. 이는 일반적으로 손상된 파일이 아니며 반드시 스캔한 복사본도 아닙니다. 근본 원인은 PDF 내부의 글리프(Glyph)-유니코드 매핑 테이블(ToUnicode CMap)이 누락되었거나 잘못되었기 때문입니다.
렌더링 엔진은 글리프 인덱스를 사용하여 시각적 콘텐츠를 그리는 반면, 클립보드 및 텍스트 추출 도구는 매핑 테이블을 사용하여 의미 있는 문자를 복원합니다. 두 개가 깨지면 "시각적으로 정상적이고 기계가 읽을 수 없는" 잘못된 텍스트 레이어가 나타납니다.
문서 번역이나 구조화된 추출을 하기 전에 먼저 매핑에 문제가 있는지, 아니면 페이지 자체가 이미지인지 확인해야 합니다. 그렇지 않으면 후속 OCR 또는 NLP 프로세스가 잘못된 전제를 기반으로 합니다.
글리프 인덱스와 유니코드 매핑 간의 중단 메커니즘
PDF 사양에서는 글꼴에 글리프 윤곽선 및 너비 정보만 포함할 수 있지만 문자 인코딩 매핑은 포함할 수 없습니다. 다음 조건에서는 파손이 발생할 수 있습니다.
- PDF를 생성하는 소프트웨어가 ToUnicode 테이블을 올바르게 작성하지 않습니다.
- 사용자 정의 인코딩이 사용되지만 디코딩 규칙은 제공되지 않습니다.
현재 추출기는 원래 CID(글리프 ID)만 가져올 수 있습니다. 이러한 ID는 렌더러에 의미가 있지만 텍스트 처리에는 가치가 없습니다.
일부 도구는 경험적 방법을 사용하여 매핑을 추측하며 그 결과 중국어 구두점을 라틴 문자로 변환하거나 숫자를 제어 문자로 바꾸는 등 합리적으로 보이지만 실제로는 잘못된 문자가 나올 수 있습니다. 이러한 종류의 "더미 텍스트"는 null이 아닌 검사를 통과할 수 있기 때문에 순수 공백보다 더 미묘하지만 다운스트림 링크에서 자동 데이터 오염을 일으킬 수 있습니다.
이러한 문제를 판단하는 핵심은 텍스트를 선택할 수 있는지 여부가 아니라, 추출된 문자열이 시각적 내용과 의미적으로 일치하는지 확인하는 것입니다.
메모리 합성 진단을 위해 PyMuPDF를 사용하세요
다음 코드는 메모리에 입력을 구성하고 진단 논리를 확인합니다.
from io import BytesIO
from PIL import Image
import pymupdf
def inspect(page):
text = page.get_text().strip()
images = page.get_images()
if "\ufffd" in text:
state = "review_replacement_characters"
elif text:
state = "text_present_needs_semantic_review"
elif images:
state = "image_without_extracted_text"
else:
state = "empty_text_needs_review"
return {"state": state, "characters": len(text), "image_refs": len(images)}
with pymupdf.open() as doc:
doc.new_page().insert_text((50, 50), "Text sample")
doc.new_page()
picture = BytesIO()
Image.new("RGB", (16, 16), "red").save(picture, format="PNG")
doc.new_page().insert_image(pymupdf.Rect(10, 10, 100, 100), stream=picture.getvalue())
assert inspect(doc[0])["state"] == "text_present_needs_semantic_review"
assert inspect(doc[1])["state"] == "empty_text_needs_review"
assert inspect(doc[2])["state"] == "image_without_extracted_text"
assert inspect(doc[2])["characters"] == 0
위 코드에서 diagnose_text_layer 함수는 get_text("text")를 통해 원본 텍스트를 얻고, unicodedata.category를 사용하여 제어 문자와 공백 문자를 필터링하고, 유효 콘텐츠의 비율을 계산합니다. 동시에 get_text("blocks")를 통해 이미지 블록의 존재를 감지합니다.
두 가지 주장은 인쇄 적격률이 0.9보다 높은 일반 문서와 문자 수가 0인 스캔 문서라는 두 가지 사례를 확인합니다. 이는 핵심 분기 논리를 다룹니다.
이 진단은 통계적 특성에만 근거한다는 점에 유의하는 것이 중요합니다. 암호화된 글꼴이나 특수 인코딩의 경우 여전히 수동 검토가 필요합니다.
📊 핵심 비교
다음 표에는 다양한 신호에 해당하는 검사 방향과 도출해서는 안 되는 결론이 나열되어 있습니다.
| 신호 | 다음 확인 단계 | 도출되어서는 안되는 결론 |
|---|---|---|
| 인쇄 가능한 텍스트가 있습니다. | 의미, 순서, 소스 확인 | 추출할 수 있으면 정확하다는 뜻입니다. |
| 대체 캐릭터가 있습니다 | 인코딩 및 글꼴 매핑 검토 | 모든 캐릭터가 사라졌습니다 |
| 사진은 있는데 글이 없네요 | 이미지에 텍스트가 포함되어 있는지 확인하세요. | 전체 페이지를 스캔해야 합니다. |
| 텍스트나 이미지가 감지되지 않았습니다. | 페이지 그림 내용 보기 | 빈 페이지여야 합니다. |
🎯 어떤 방법이 당신에게 적합합니까?
텍스트가 보이지만 복사할 수 없는 경우
일반적으로 손상된 매핑으로 인해 발생하는 ToUnicode 매핑 및 글꼴 인코딩 확인을 우선적으로 수행합니다.
복사된 텍스트는 정상적으로 보이지만 내용이 잘못된 경우
시각적 콘텐츠를 사용하여 추출 결과를 세그먼트별로 비교하고, 비어 있지 않은지 확인하지 마세요.
페이지에 그림만 있고 텍스트가 없는 경우
이미지에 텍스트가 포함되어 있는지 확인하고 OCR이 필요한지 여부를 결정하세요. 전체 페이지가 스캔이라고 가정하지 마십시오.
문서번역을 하려고 한다면
둔감한 샘플이 번역 프로세스로 전달되기 전에 텍스트 무결성 검사가 완료됩니다.
문서 번역에 이 체크리스트를 사용하세요
먼저 페이지 순서, 소스 위치 및 텍스트 무결성을 확인한 다음 동일한 둔감 샘플을 번역 프로세스에 제출하세요. 번역 후에도 제목, 텍스트, 일러스트레이션이 올바르게 일치하는지 확인해야 합니다. 텍스트가 매끄러운지 여부만 확인할 수는 없습니다.
OmniDoc(제품 포털)는 다양한 형식의 문서 번역 포털을 제공하며 공식 웹사이트에서는 OCR, 용어집 및 이중 언어 비교 기능을 소개합니다. 파일에서 직접 처리를 시작하려면 실제 샘플을 사용하여 이 경로를 평가할 수 있습니다.
업로드 권한이 있는 둔감화된 파일을 사용하시고, 이 글의 확인 항목을 사용하여 결과를 검토하시기 바랍니다. OmniDoc이 이 기사에 언급된 오픈 소스 라이브러리나 내부 알고리즘을 사용한다는 주장은 없으며 이 예가 제품 성능 테스트를 대체하지도 않습니다.
❓ 자주 묻는 질문(FAQ)
1. 텍스트 추출이 가능하다면 텍스트 레이어가 맞다는 뜻인가요?
할 수 없습니다. 추출된 콘텐츠의 의미, 순서, 출처도 확인해야 합니다. 매핑 오류가 발생하면 겉보기에는 그럴싸해 보이는 문자가 출력될 수 있습니다.
2. 페이지에 사진이 있습니다. 스캔본이라는 뜻인가요?
불확실한. 이미지 인용은 이미지가 페이지 전체를 덮고 있다는 것을 증명하지 않으며, 텍스트를 인식할 수 있다는 것을 증명하지도 않습니다. 이미지에 텍스트가 포함되어 있는지 확인해야 합니다.
3. 텍스트나 이미지가 모두 감지되지 않습니다. 이는 페이지가 비어 있다는 뜻인가요?
이것으로부터 어떤 결론도 도출할 수 없습니다. 판단하기 전에 페이지의 그림 내용을 확인해야 합니다.
4. 이 진단 스크립트는 모든 PDF에서 작동합니까?
할 수 없습니다. 통계적 특성만을 기반으로 하며 암호화된 글꼴이나 특수 인코딩에 대해서는 여전히 수동 검토가 필요합니다.
📝 요약
PDF를 볼 수 있는지, 복사할 수 있는지 먼저 텍스트 레이어와 문자 매핑을 확인한 다음 이미지 내용을 보고 마지막으로 스캔 문서인지 여부를 확인하세요. 가공 전 원본을 보관하고 검사 항목에 따라 하나씩 검토합니다.


