2011-04-18 4 views
2

포스트 스크립트 프로그래밍에 관해서는 초보자입니다. 여기에있는 천재의 도움을 받아 문제를 해결하려고했습니다.포스트 스크립트로 문자열 찾기 및 ASCII로 변환

저는 현재 포스트 스크립트 파일에서 무언가를 읽고 새 포스트 스크립트 파일에 배치해야하는 프로젝트에서 일하고있는 학생입니다.

고스트 스크립트의 도움으로 포스트 스크립트 파일을 편집하여 원본 포스트 스크립트 파일에서 특정 값을 출력합니다.

지금은 파일을 가지고 있지만 16 진수 문자열에 포함 된 글꼴을 가져 와서 디코드하여 ASCII 심볼을 얻고 싶습니다.

원본 파일이

/G5 같은 모양 개체가 < 1C60D8A8C9B64EDFFB83C6241DB110BEE5AB2FAD9D94B39ED5E81E7411B >

66E9361DDE78FC667AB91EF9824 그리고 내가 뭘 원하는 그들을 선택하고 포스트 스크립트 코드에서 몇 가지 사전에이를 확인하는 것입니다 (systemdict ???) 그리고 그 값을 선택하십시오.

아무에게도이 작업을 수행 할 사람이 있습니까? (W) DEF 내가 파일을 얻을 지금은의 문자열 "<을 가정 해 봅시다 검색 할

파일 (%의 표준 출력) :

는 지금 파일을 선택하려면 코드는 다음과 같이 시작 1C60D8 "사이에있는 모든 내용을 복사하고"> "기호를 모두 복사하십시오.

그런 다음 16 진수 코드가 숨겨져 있는지 확인하고 싶습니다.이 경우 16 진수 코드는 Arial에서"E "입니다.

텍스트를 추출하여 16 진수 문자열없이 순수한 ASCII 형식의 새 파일로 만들 수 있습니다. 예를 들어 "P"가됩니다. 그런 다음 새로운 포스트 스크립트 파일에서 "P"를 찾아서 내 홈페이지에 넣는 소프트웨어를 만들 수 있으며 최종 결과는 마지막 시험의 모든 사람 테스트 결과가있는 홈페이지입니다.

지금 나는 파일에서 정보를 추출하기 위해 인터넷에서 어딘가에 발견 된 다음 명령 줄과 ghostscript를 사용하고 있습니다.

gswin32c.exe -q -dNODISPLAY -dNOPAUSE -sFONTPATH ​​= C : \ WINDOWS \ 글꼴 -dBATCH extract.ps input.ps> output.ps extract.ps 내가 필요하는 파일입니다

16 진수 문자열을 검색하기 위해 일부 인코딩을 수행하고 인코딩 한 다음 마지막으로 출력하여 "정상적인"글꼴이되도록하고, 거짓말해야 할 좌표의 일부를 작성합니다.

내가 어떻게 시작해야하는지에 대한 지식이 있다면 끝내 줄 것입니다. 지금 당장은 이것이 효과가 없을 것이라고 생각하고 있습니다. 다른 학생들처럼 다른 접근법을 사용해야 할 것입니다.하지만 PostScript가 프로그래밍 언어라는 사실을 알게된 이후로 나는 그것을 만들 수 있다고 생각했습니다.

지금 당장 나는 처음에 이렇게 할 필요가 있다고 생각합니다. (% Stdout) (w) 시험 { dup ???? 문안 작성 확인 문항에 대해 확인 하시겠습니까? gcheck ?? } bind def show test ???

현재 인터넷에서 발견 된 문학 작품을 읽으려고하고 있지만 매우 어렵습니다.

당신이 예제를 통해 문제를 해결하는 방법을 알고 있다면, 내가

안부를 알려 주시기 바랍니다!

답변

2

내 생각에 옳은 길을 걷고 있습니다. PostScript 은 프로그래밍 언어 인이므로 일반적인 목적을 위해 PostScript 인터프리터를 사용해야합니다. 단순히 파일을 구문 분석하거나 다른 유사한 접근법은 일반적인 경우에는 작동하지 않습니다 (단순한 파일 일 수도 있지만).

인용 한 원본 개체는 글꼴 (아마도 Fontographer에서 제작 한 유형 3 글꼴)의 글리프 설명 일 가능성이 높지만 이는 추측 일뿐입니다. 글리프은 글꼴이 아니므로 글꼴은 글리프 모음입니다.

이 작업을 수행하는 경우 다양한 포스트 스크립트 연산자를 재정의하는 것으로 시작합니다. 예를 들어 'show'를 다시 정의하면 그려지는 텍스트를 선택할 수 있습니다 (실제로는 여러 가지 종류의 show 연산자가 있으므로 다시 정의해야합니다). 동시에 글꼴 사전을 선택할 수 있으며 파일에 출력 할 수 있습니다.

%!PS 
% redefine.ps 
% 

/OutputFile (/out.txt) (w) file def 

/show { 
    OutputFile exch writestring 
} bind def 

그런 다음이 명령을 실행합니다 :

예를 들어, 당신은 시작할 수

gswin32 redefine.ps input.ps 

그것은 연산자를 재정의 redefine.ps를 실행, 그것은 input.ps을 해석합니다. 다시 정의 된 'show'연산자는 'show'연산의 문자열 인수를 /out.txt이라는 파일에 씁니다.

분명히 이것을 다른 쇼 운영자에게까지 확장 할 수 있습니다. 글꼴 사전의 복사본을 가져온 다음 필요에 따라 글꼴 사전을 내보낼 수도 있습니다. 이 관련 프로그램의 약간의 그러나 여기 개요입니다 :

%!PS 
% 

/OutputFile (/out.txt) (w) file def 

%% FontStore will be an array of font dictionaries 
/FontStore 1 array def 

/CheckFont { 
    currentfont /FontName get %% Extract the name of the current font from the 
          %% font dictionary 
    true      %% termination condition 
    FontStore {    %% forall is called for each member of the array 
    /FontName get   %% get font name from stored font dictionary 
    2 index     %% copy the current font name from the stack 
    eq      %% See if they are the same 
    { 
     pop     %% remove the 'false' condition 
     false     %% replace it with a 'true' 
     exit     %% and exit the loop 
    } if 
    } forall 
    exch pop     %% remove stored font name 
    { 
    %% make the array one bigger, copy the old array, add the current font dict. 
    } if 
} def 

/show { 
    CheckFont 
    OutputFile exch writestring 
} bind def 

/showpage { 
    %% Emit the fonts if required, potentially reorder the stored strings etc. 
} bind def 

을 이제 우리가 '쇼', 우리는 현재의 폰트가 이미 저장되어 있는지 확인하고,없는 경우를 저장할을 실행 할 때마다. 페이지 끝 (showpage가 실행될 때)에 저장된 글꼴 사전을 글꼴로 내보내는 등 다른 작업을 수행 할 수 있습니다.

'show'에 도착할 때 문자열의 위치를 ​​기록하는 것이 좋습니다. currentpoint 연산자는 show가 발생할 때 x.y 위치를 제공합니다. 이 파일을 파일에 쓰는 대신 문자열과 그 위치를 배열에 저장할 수도 있습니다. 사실 당신이 유용한 정보 사전을 만들 수 있습니다

/show { 
    5 dict   %% make a dictionary 
    begin    %% start it (put it on the dict stack as the current dict) 
    /String exch def %% put the string operand in the dict. 
    currentpoint  %% get the current location 
    /Y exch def  %% store in the dict 
    /X exch def  %% 
    currentfont  %% get current font dict 
    /FontName get  %% get FontName 
    /Font exch def %% store name in dict 
    currentfont  %% copy current dict to operand stack 
    end    %% close dictionary and remove from dict stack 
    %% 
    %% In here, add the newly created dictionary to an array of dictionaries 
    %% 
} bind def 

을 이제 'showpage를'에 도착하면, 당신은 글꼴의 배열, 그들의 특성을 가진 문자열 조각의 배열을 가지고있다. 글꼴을 내 보낸 다음 적절한 글꼴 선택 기준과 문자열을 작성하여 출력 PostScript 파일의 문자열을 '표시'할 수 있습니다.

당신이 할 수있는 일이 훨씬 더 많습니다. 색상을 캡처 할 수 있기 때문에 필요한 글꼴 크기를 계산할 수 있도록 CTM이 필요합니다.

+0

와우! 그것은 많은 정보입니다! : D 감사합니다. 코드를 작성한 방법을 정확히 해석하고 다시 시도해 보겠습니다. D – Joe

+0

다시 물어봐도 죄송하지만 언제 다시 온라인 상태가 될지 모를 수는 있습니다. redefine.ps 파일에 쉽게 삽입 할 수 있도록 텍스트를 편집하는 데 도움이됩니까? 코멘트가 무엇이고 코드가 무엇인지 편집하는 데 어려움이 있습니다! :/ 감사합니다. – Joe

+0

@ 조 : 자신의 질문도 형식이 잘못되었습니다. 어때 ** ** 하나 먼저 개선? :-) –

관련 문제