2017-02-14 1 views
1

상황 : 버전 1.6을 사용하여 PDF를 보았습니다. 이 PDF에는 여러 스트림이 있습니다. 해당 스트림에는 압축 된 텍스트 (Flate)가 있었으므로이 스트림을 압축 해제했습니다. 그 후, 압축 해제 된 해당 스트림의 Tj 부분을 추출했습니다. 나는 TJ 명령 전에 괄호 사이에 읽을 수있는 텍스트가 될 것이라고 가정하지만, 결과는 다음되었습니다PDF로 추출한 텍스트를 읽을 수없는 것 같습니다

Result

실제 질문 : 아무 생각이 없기 때문에가, 내가있어 thre, 나는 그것이 어떤 종류의 내용인지 알고 싶다. 또한 :이 문자열에서 일반 텍스트를 가져올 수 있습니까? 아니면 일반 텍스트를 추출하는 데 추가 정보가 필요합니까?

또한 연구 : 내가 iTextSharp에 의해 생성 된 위치를 분석하려고 PDF는 (PDF 파일을 생성하는 C# 라이브러리 것 같다). ...

답변

1

를가 관련 정보인지 모르겠지만, 그 라이브러리가 텍스트 데이터 또는 무언가의 암호화의 특별한 방법을 사용하는 수 있습니다 나는 괄호 사이에 읽을 수있는 텍스트가 될 것이라고 가정 Tj 명령 전에

이 가정은 간단한 PDF에만 적용됩니다.

텍스트 나타내는 연산자의 문자열 피연산자 그린 될 글리프를 식별하는 문자 코드의 순서로 해석되어야한다

는 PDF 규격 (ISO 32000-1)에서 인용.

간단한 글꼴을 사용하면 문자열의 각 바이트를 별도의 문자 코드로 처리해야합니다. 문자 코드는 9.6.6 절. "문자 인코딩"에 설명 된 것처럼 글 꼴을 선택하기 위해 폰트의 인코딩에서 찾아보아야합니다.

복합 글꼴 (PDF 1.2)을 사용하면 여러 바이트 코드를 사용하여 글리프를 선택할 수 있습니다. 이 경우 문자열의 하나 이상의 연속 바이트는 단일 문자 코드로 처리됩니다. 코드 길이와 코드에서 글리프로의 매핑은 9.7 절. "복합 글꼴"에 설명 된 CMap이라는 데이터 구조에 정의됩니다.

(제 9.4.3 - 텍스트보기 운영자 - ISO 32000-1) 내가 좋아하는 것 때문에

,

는 내용의 유형을 알고 있습니다.

위에서 언급 한 것처럼, 이러한 "문자열"은 1 바이트 또는 복수 바이트 문자 코드로 구성됩니다. 이 코드는 현재 글꼴의 인코딩에 따라 다릅니다. PDF의 각 글꼴 객체는 다른 인코딩을 가질 수 있습니다.

이러한 인코딩은 몇몇 표준 인코딩 (MacRomanEncoding, MacExpertEncoding 또는 을 WinAnsiEncoding) 또는 일부 사용자 인코딩 할 수있다. 특히 삽입 된 글꼴 하위 집합의 경우 1은 페이지에 그려진 첫 번째 글자의 코드이고 2는 두 번째 글자, 다른 글자, 세 번째 글자, 다른 세 번째 글자의 코드입니다.

추가 정보 :이 문자열에서 일반 텍스트를 가져올 수 있습니까? 아니면 일반 텍스트를 추출하는 데 추가 정보가 필요합니까? 텍스트를 보여주는 명령의 문자열 인수의 인코딩으로

는 현재 글꼴에 따라, 적어도 (인코딩을 현재의 폰트 이름을 추적 (Tf를 명령) 및 인코딩 정보를 조회해야 또는 ToUnicode지도)를 현재 글꼴 개체에서 가져옵니다.

섹션 9.10 - 텍스트 콘텐츠 추출 - ISO 32000-1의 경우이를 좀 더 자세히 설명합니다.

또한 지침을 표시하는 텍스트의 순서는 읽을 순서 일 필요는 없습니다. "Hello"라는 단어는 예를 들어. 먼저 'o'를 그리고 나서 왼쪽으로, 그 다음 'el', 다시 왼쪽으로, 그리고 나서 'H'를 누른 다음 오른쪽으로 이동하고 마지막으로 나머지 'l'으로 표시하십시오. 그리고 두 단어는 공백 문자로 구분할 필요가 없습니다. 텍스트 위치 지정 명령이 조금만 진행될 수 있습니다.

따라서 일반적으로 그려지는 별도 문자열의 위치도 추적해야합니다.

관련 문제